我最近提出了一个关于我在 Javascript 中使用带有后向断言的 RegExp 构造函数时遇到的错误的问题。
我想要做什么,检查输入的数字是否大于 5,前面有一个奇数反斜杠,换句话说,前面没有转义的反斜杠
这是一个示例。
\5 // match !
\\5 // no match !
\\\5 // match!
我在网上找到的正则表达式是
(?<!\\)(?:\\{2})*\\(?!\\)([5-9]|[1-9]\d)
但这里的问题是 (?<!\\)
导致 JavaScript 抛出错误无效正则表达式组的问题。
有解决方法吗?
最后,我知道我当前的正则表达式也可能在检测大于 5 的数字时出现错误,例如\55 将不匹配。我将非常感谢您的帮助。
谢谢
最佳答案
JS 不支持lookbehinds(至少不是所有主流浏览器都支持),因此会出现错误。您可以尝试:
(?:^|[^\\\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)
)
关于javascript - 如何使用 Javascript 检查正则表达式中的奇数反斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50334881/