簡體   English   中英

在JavaScript中使用正則表達式匹配“ $”

[英]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.

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