簡體   English   中英

如何使用Javascript在正則表達式中檢查反斜杠的奇數個數?

[英]How to check for odd numbers of backslashes in a regex using Javascript?

我最近問了一個有關我在使用帶后置斷言的Java中使用RegExp構造函數時遇到的錯誤的問題。

我要執行的操作是,檢查輸入的數字是否大於5並加上奇數個反斜杠,換句話說,就是不要有轉義的反斜杠

這是一個例子。

\5              // match !
\\5            // no match !
\\\5           // match!

我在網上找到的正則表達式是

(?<!\\)(?:\\{2})*\\(?!\\)([5-9]|[1-9]\d)

但是這里的問題是(?<!\\\\)導致JavaScript拋出錯誤的正則表達式組錯誤。

是否有解決方法?

最后,我知道我的當前正則表達式在檢測大於5的數字時也可能會出錯,例如\\ 55將不匹配。 多謝您的協助。

謝謝

JS不支持回溯(至少不是所有主流瀏覽器都支持),因此會出現錯誤。 您可以嘗試:

(?:^|[^\\\n])\\(?:\\{2})*(?![0-4]\b)\d+

或者,如果您關心十進制數字:

(?:^|[^\\\n])\\(?:\\{2})*(?![0-4](?:\.\d*)?\b)\d+(?:\.\d*)?

現場演示

注意:如果您沒有多行文字,則不需要\\n

正則表達式細分

  • (?:非捕獲組的開始
    • ^行首
    • | 要么
    • [^\\\\\\n]除反斜杠外不匹配
  • )非捕獲組的結束
  • \\\\(?:\\\\{2})*匹配反斜杠,其后跟偶數
  • (?![0-4](?:\\.\\d*)?\\b)以下數字不應小於5(請注意十進制數字)
  • \\d+(?:\\.\\d*)? 匹配號碼

JS代碼:

 var str = `\\\\5 \\\\\\\\5 \\\\\\\\\\\\5 \\\\\\\\\\\\4 \\\\4. \\\\\\\\\\\\6 `; console.log( str.match(/(?:^|[^\\\\\\n])\\\\(?:\\\\{2})*(?![0-4](?:\\.\\d*)?\\b)\\d+(?:\\.\\d*)?/gm) ) 

暫無
暫無

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

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