我有一个示例字符串:
'&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", "&"]
答案 0 :(得分:2)
答案 1 :(得分:0)
看起来你的正则表达式一直匹配 last &
,而不是第一个没有反斜杠的正面。尝试添加?
运算符,使其匹配尽可能小,如下所示:
/(tooltext=)(.*?)([^\\])(&)/
如果您只想要tooltext=
和&
之间的文字,请尝试将其作为匹配组返回重要部分:
/tooltext=(.*?[^\\])&/