javascript - 如何使用 Javascript 检查正则表达式中的奇数反斜杠?

标签 javascript regex lookbehind

我最近提出了一个关于我在 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*)?

Live demo

注意:如果您没有多行文本,则不需要 \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/

相关文章:

javascript - 类型错误 : Cannot Read Property child of undefined

javascript - AngularJS 过滤器去除某个正则表达式

java regex Lookbehind 如何剪切掉部分预​​搜索结果?

Python 正则表达式引擎 - "look-behind requires fixed-width pattern"错误

javascript - 将 SnapshotChanges 与 CombineLatest 结合使用

Javascript函数定义

javascript - JavaScript中这些正则表达式的含义是什么?

javascript - 将 CSS 选择器与 Javascript RegExp 相匹配

regex - 在 linux 和 AIX 中使用正则表达式替换 bash 脚本中的字符串

javascript - Firefox Javascript正则表达式获取方括号内但不包括括号的数字数组