2016-07-25 17 views
0

Ich habe Probe Zeichenfolge wie:Regex Übereinstimmung für ein bestimmtes Muster ohne ein spezifisches Muster

  1. '&label=20:01:27&tooltext=abc\&|\|cba&value=6|59|58|89&color=ff0000|00ffff'
  2. '&label=20:01:27&tooltext=abc\&|\|cba&value=6|59|58|89'

Mein Ziel ist es, den Text von ‚tooltext=‘ bis zum ersten auszuwählen Vorkommen von "&", dem kein \\ vorausgeht. Ich verwende den folgenden regulären Ausdruck:

/(tooltext=)(.*)([^\\])(&)/ 

und die .match() Funktion.
Es ist für die zweite Saite arbeitet gut, aber für die erste Saite bis zu dem letzten Auftreten von ‚&‘ nicht durch \\ voran Auswahl es ist.

var a = '&label=20:01:27&tooltext=abc\&|\|cba&value=6|59|58|89&color=ff0000|00ffff', 
b = a.match(/(tooltext=)(.*)([^\\])(&)(.*[^\\]&)?/i) 

Ergebnis

b = ["tooltext=abc\&|\|cba&value=40|84|40|62&", "tooltext=", "abc\&|\|cba&value=40|84|40|6", "2", "&"] 

Aber was ich brauche, ist:

b = ["tooltext=abc&||cba&", "tooltext=", "abc&||cb", "a", "&"] 

Antwort

2

Ich glaube, Sie einen regulären Ausdruck wie diese verwenden:

/tooltext=(.*?\\&)*.*?&/ 

[Regex Demo]

und fand immer ein nicht-entkam &:

/tooltext=(.*?\\&)*.*?[^\\]&/ 
+0

Vielen Dank für die Website-Link! regex101.com hat ein Lesezeichen gesetzt. –

+0

Danke für die Hilfe. –

+0

@ shA.t - Ich habe Angst, aber es ist der folgende Text passend 'value = 66,34 | 77,99 & tooltext = av \ &, \, | \ & \ | ^' Aber es sollte idealerweise nicht, weil es hat nicht nicht entkommen & –

0

Es sieht aus wie Ihre regex ohne Backslash auf den letzten& anstelle des ersten ganzen Weg ist passend vor ihm . Versuchen Sie, die ? Betreiber machen es so klein wie möglich entsprechen in etwa so:

/(tooltext=)(.*?)([^\\])(&)/

Und wenn Sie nur den Text zwischen tooltext= und & wollen, versuchen Sie dies zu den wichtigen Teil als die ausgeglichene Gruppe zu machen zurückkehren :

/tooltext=(.*?[^\\])&/

Verwandte Themen