簡體   English   中英

正則表達式匹配特定模式(不包括特定模式)

[英]Regex match for a specific pattern excluding a specific pattern

我有示例字符串為:

  1. '&label=20:01:27&tooltext=abc\\&|\\|cba&value=6|59|58|89&color=ff0000|00ffff'
  2. '&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=(.*?\\&)*.*?[^\\]&/

看起來您的正則表達式一直與最后一個 &匹配&而不是第一個匹配,並且前面沒有反斜杠。 嘗試添加? 運算符以使其盡可能匹配,例如:

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

並且,如果您只想在tooltext=&之間tooltext=文本,請嘗試執行以下操作以使其以匹配組的形式返回重要部分:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM