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

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

我最近问了一个问题,关于我在 Javascript 中使用 RegExp 构造函数和后向断言时遇到的错误。

我想做的是检查大于 5 的数字输入,前面有 奇数 个反斜杠,换句话说,前面没有转义反斜杠

这是一个例子。

              // match !
\5            // no match !
\           // 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*)?

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)
)