2017-06-15 2 views
-2

Ich habe diese Zeichenfolge (facettiert Suchbegriff):Wie kann ich mit Regex-Name/Wert-Paaren, die durch einen Doppelpunkt getrennt sind, analysieren?

var q = ":salesRevenue:brand:Tchelicon:brand:Eurocom 
:brand:Turbosound:brand:Labgruppen:brand:Tannoy:brand:Klarkteknik 
:brand:Midas:brand:Bugera 
:brand:Tcelectronic 
:eligibleProduct:0010000066:publicProduct:false:brand:Behringer:productFilter:All:"; 

ich es drei separate Strings geteilt werden soll: q_brand, q_pubs und q_product und mein Kunde will alles in Regex.

q_brand besteht aus Werten mit Werten, denen nur "brand:" vorangestellt ist.

q_pubs sind Werte, denen "defineableProduct:" und "publicProduct:" vorangestellt sind.

q_product sind Werte, denen "productFilter:" vorangestellt ist.

Ich möchte, dass sie zu erfassen, auch in der Lage sein, wenn sie Positionen vertauschen (ex wie die Position. Marke: Behringer :)

Das Endergebnis wird voraussichtlich sein:

var q_brand = "brand:Tchelicon:brand:Eurocom 
:brand:Turbosound:brand:Labgruppen:brand:Tannoy:brand:Klarkteknik 
:brand:Midas:brand:Bugera 
:brand:Tcelectronic:brand:Behringer"; 

var q_pubs = "eligibleProduct:0010000066:publicProduct:false"; 

var q_product = "productFilter:All"; 

I versucht mit (brand:.+:) auf brand:apple:brand:orange:product:hello:brand:grain: für eine Instanz und mehrere andere, aber bekomme unerwartete Ergebnisse.

+1

es nicht semi Doppelpunkt. Es ist Doppelpunkt. Semikolon ist das ';' –

+0

@SagarV OK, sorry dafür. Seien Sie versichert, es ist nur ein ehrlicher Fehler. – jestrange

+0

Ich denke, es gibt eine Fraktion, die denkt, dass "einfache" Regex-Fragen nicht hierher gehören, also blendet sie sie sofort (und ihre Antworten) ab. Es kann für Experten schwierig sein, sich daran zu erinnern, dass es nur leicht ist, wenn Sie bereits wissen, wie. Schwitz es nicht. –

Antwort

0

Sie waren ziemlich nah - das Hauptproblem in Ihrem Versuch war, dass Sie den abschließenden Doppelpunkt in Ihrem Match eingeschlossen haben, der spätere Matches störte.

Das allgemeine Muster ist (foo:[^:]+)/g) - dies entspricht einem Feldnamen "foo", gefolgt von einem Doppelpunkt, gefolgt von einer beliebigen Zahl größer als Null von Zeichen, die nicht Doppelpunkte sind, wiederholt. Dann werden die Ergebnisse zusammengefügt (wieder mit Doppelpunkten), um zu Ihrer gewünschten Ausgabe zu passen.

für q_pub haben Sie zwei verschiedene Feldnamen, so verallgemeinert "\ w + Product" (eine beliebige Anzahl von Buchstaben Zeichen von Produkt gefolgt übereinstimmen.)

var q = ":salesRevenue:brand:Tchelicon:brand:Eurocom:brand:Turbosound:brand:Labgruppen:brand:Tannoy:brand:Klarkteknik:brand:Midas:brand:Bugera:brand:Tcelectronic:eligibleProduct:0010000066:publicProduct:false:brand:Behringer:productFilter:All:"; 
 

 
var q_brands = q.match(/(brand:[^:]+)/g).join(":"); 
 
var q_pub = q.match(/(\w+Product:[^:]+)/g).join(":"); 
 
var q_products = q.match(/(productFilter:[^:]+)/g).join(":"); 
 

 
console.log(q_brands); 
 
console.log(q_pub); 
 
console.log(q_products);

Verwandte Themen