[英]Matching “$” using regex in JavaScript
我正在嘗試編寫一個正則表達式來匹配“ $”之間的任何單詞,例如var myString =“一個鎮上有$ dog $#和$ rat $”; 我要匹配狗和老鼠,我為此寫了表達式
var reg = /^$(.*)$/gmi
但這不是因為,“ $”是行尾的特殊字符,我如何轉義它,我可以使用“ \\”嗎? 你能建議正確的表達嗎?
正如您在一些評論中提到的,貪婪存在問題。 *
將消耗盡可能多的能量,因此,如果以.*
它,則以后可以再找到另一個$
時,它也會消耗更多的$
。 有兩種可能性。 最快和最常見的方法是簡單地使該量詞變得不滿意:
/\$(.*?)\$/g
現在它將消耗盡可能少的能量。 但是,建議的方法是使重復和定界符互斥並保持重復貪婪:
/\$([^$]*)\$/g
這通常更有效,因為不需要回溯。 (請不要對此表示懷疑,在任何特定情況下,回溯版本可能仍會更有效,但這通常是推薦的做法)
如您所說,應使用“ \\”轉義特殊字符。 同樣,“ ^”是您要匹配的字符串的開頭。 您應該使用以下內容:
/\$(.*)\$/g
/\$(.*)\$/
如您所想,您使用\\
進行轉義。 另外,根據您的要求, ^
(字符串的開頭)是有害的。
如果您多次出現這樣的字符串,則必須注意貪婪性(默認設置),因此您可以從內容中禁止終止符:
/\$([^$]*)\$/g
或者您將重復運算符設為非貪婪:
/\$(.*?)\$/g
是的,轉義用\\
-s完成,如果您想捕獲單個$...$
標記的單詞,請嘗試以下正則表達式:
/\$([^$]+)\$/gmi // inside character classes ( the []-s) you don't need to escape it, but if you do it does the same thing
我可以用嗎 ”\\” ??
是。
你為什么不自己嘗試呢?
var reg = /^\$(.*)\$/gmi
將匹配:
$
$
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.