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