排除特定模式的特定模式的正则表达式匹配
Regex match for a specific pattern excluding a specific pattern
我有示例字符串:
'&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'
我的 objective 是 select 从“tooltext=
”到第一次出现“&
”(前面没有 \
)的文本.我正在使用以下正则表达式:
/(tooltext=)(.*)([^\])(&)/
和 .match()
函数。
它适用于第二个字符串,但对于第一个字符串,它是 selecting 直到最后一次出现 '&
' 之前没有 \
.
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=(.*?\&)*.*?&/
并且总能找到一个非转义的 &
:
/tooltext=(.*?\&)*.*?[^\]&/
看起来您的正则表达式一直匹配到 last &
而不是前面没有反斜杠的第一个。尝试添加 ?
运算符以使其匹配尽可能小,如下所示:
/(tooltext=)(.*?)([^\])(&)/
如果您只想要 tooltext=
和 &
之间的文本,请尝试将其 return 作为匹配组的重要部分:
/tooltext=(.*?[^\])&/
我有示例字符串:
'&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'
我的 objective 是 select 从“tooltext=
”到第一次出现“&
”(前面没有 \
)的文本.我正在使用以下正则表达式:
/(tooltext=)(.*)([^\])(&)/
和 .match()
函数。
它适用于第二个字符串,但对于第一个字符串,它是 selecting 直到最后一次出现 '&
' 之前没有 \
.
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=(.*?\&)*.*?&/
并且总能找到一个非转义的 &
:
/tooltext=(.*?\&)*.*?[^\]&/
看起来您的正则表达式一直匹配到 last &
而不是前面没有反斜杠的第一个。尝试添加 ?
运算符以使其匹配尽可能小,如下所示:
/(tooltext=)(.*?)([^\])(&)/
如果您只想要 tooltext=
和 &
之间的文本,请尝试将其 return 作为匹配组的重要部分:
/tooltext=(.*?[^\])&/