javascript - 如何使用Javascript检查正则表达式中的奇数个反斜杠?
问题描述
我最近问了一个关于我在 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 排序列表,希望在每个项目旁边显示文本
- python - 当我放入 python shell 时无法运行 jupyter notebook
- elasticsearch - 如何在 elasticSearch 上加入索引
- performance - 如何在 Loadrunner 的 Truclient 协议中在 Chromium 中设置自定义下载路径
- browser - 如何检测非常旧版本的 Edge
- python - 迭代加入数据框
- jenkins - 如何在阶段并行运行期间获得失败的阶段名称?
- android - 具有两个生成字段的实时数据库查询
- jenkins - 在 jenkinsfile 或管道中找不到 def 命令
- python - 如何计算高分辨率图像之间的匹配特征?