最近,我问了一个问题,问我在Javascript中使用RegExp构造函数时遇到的一个错误,这个构造函数带有lookbehind断言。
我想做的是,检查一个大于5的数字输入,它前面有一个反斜杠的奇数数,换句话说,它前面没有转义反斜杠。
下面是一个例子。
\5 // match !
\\5 // no match !
\\\5 // match!我在网上找到的Regex是
(?<!\\)(?:\\{2})*\\(?!\\)([5-9]|[1-9]\d)但是这里的问题是,(?<!\\)会导致javascript抛出一个错误,regex组无效。
有办法解决这个问题吗?
最后,我知道我当前的正则表达式在检测大于5的数字时也可能有错误,例如\55将不匹配。我很感谢你的帮助。
谢谢
发布于 2018-05-14 16:27:23
JS不支持后置查找(至少不是所有主流浏览器都支持),因此出现了错误。你可以试试:
(?:^|[^\\\n])\\(?:\\{2})*(?![0-4]\b)\d+或者,如果您关心十进制数:
(?:^|[^\\\n])\\(?:\\{2})*(??\b)\d+(?:\.\d*)?注意:如果没有多行文本,则不需要\n。
Regex击穿
(?:非捕获组的开始^开行|或[^\\\n]只匹配一个反斜杠
)端\\(?:\\{2})*匹配偶数后的反斜杠(??\b)以下数字不应小于5(关心十进制数)\d+(?:\.\d*)?匹配一个数字JS代码:
var str = `\\5
\\\\5
\\\\\\5
\\\\\\4
\\4.
\\\\\\6
`;
console.log(
str.match(/(?:^|[^\\\n])\\(?:\\{2})*(??\b)\d+(?:\.\d*)?/gm)
)
https://stackoverflow.com/questions/50334881
复制相似问题