[英]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'
我的目標是從' 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=(.*?\\&)*.*?&/
並總是找到一個非轉義的&
:
/tooltext=(.*?\\&)*.*?[^\\]&/
看起來您的正則表達式一直與最后一個 &
匹配&
而不是第一個匹配,並且前面沒有反斜杠。 嘗試添加?
運算符以使其盡可能匹配,例如:
/(tooltext=)(.*?)([^\\\\])(&)/
並且,如果您只想在tooltext=
和&
之間tooltext=
文本,請嘗試執行以下操作以使其以匹配組的形式返回重要部分:
/tooltext=(.*?[^\\\\])&/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.