我有示例字符串为:'&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=(.*?\\&)*.*?[^\\]&/