我有示例字符串为:


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


我的目标是从“ tooltext=”中选择文本,直到“ &”的首次出现,而该文本之前没有\\。我正在使用以下正则表达式:

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


.match()函数。
对于第二个字符串,它工作正常,但对于第一个字符串,它选择的是直到最后出现的'&',而不是\\

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


结果,

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


但是我需要的是:

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

最佳答案

我认为您可以使用这样的正则表达式:

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


[Regex Demo]

并总是找到一个非转义的&

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

09-26 01:34