如何使用 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*)?
注意:如果您没有多行文本,则不需要 \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 中使用 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*)?
注意:如果您没有多行文本,则不需要 \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)
)