为什么这段代码卡住了节点.js - Javascript上的错误
Why this code stuck node.js - Bug on Javascript?
我正在尝试运行这个正则表达式,但它卡住了我的控制台。为什么?
var str = "Шедевры православной музыки - 20 золотых православных песен";
str.match(/^((['u00C0-'u1FFF'u2C00-'uD7FF]+[^a-z'u00C0-'u1FFF'u2C00-'uD7FF]*)+) [a-z]+[^'u00C0-'u1FFF'u2C00-'uD7FF]*$/i);
由于((['u00C0-'u1FFF'u2C00-'uD7FF]+[^a-z'u00C0-'u1FFF'u2C00-'uD7FF]*)+)
部分原因,您的正则表达式会导致灾难性的回溯(在此处查看正则表达式的演示(。由于[^a-z'u00C0-'u1FFF'u2C00-'uD7FF]*
可以匹配零个字符,因此您基本上具有导致回溯问题的经典(a+)+
模式(cf:(['u00C0-'u1FFF'u2C00-'uD7FF]+)+
(。
要摆脱它,您需要确保子模式在分组中是强制性的,并对整个分组应用*
量词:
^(['u00C0-'u1FFF'u2C00-'uD7FF]+(?:[^a-z'u00C0-'u1FFF'u2C00-'uD7FF]+['u00C0-'u1FFF'u2C00-'uD7FF]+)*) [a-z]+[^'u00C0-'u1FFF'u2C00-'uD7FF]*$
查看正则表达式演示
在这里,['u00C0-'u1FFF'u2C00-'uD7FF]+(?:[^a-z'u00C0-'u1FFF'u2C00-'uD7FF]+['u00C0-'u1FFF'u2C00-'uD7FF]+)*
匹配:
-
['u00C0-'u1FFF'u2C00-'uD7FF]+
-['u00C0-'u1FFF'u2C00-'uD7FF]
范围内的一个或多个字符 -
(?:[^a-z'u00C0-'u1FFF'u2C00-'uD7FF]+['u00C0-'u1FFF'u2C00-'uD7FF]+)*
- 零个或多个序列:-
[^a-z'u00C0-'u1FFF'u2C00-'uD7FF]+
- 除a-z'u00C0-'u1FFF'u2C00-'uD7FF
范围字符之外的一个或多个字符 -
['u00C0-'u1FFF'u2C00-'uD7FF]+
-'u00C0-'u1FFF'u2C00-'uD7FF
范围内的一个或多个字符。
-
相关文章:
- 如何处理node.js节点mongodb中的连接和查询队列
- 更新从Mysql查询检索到的数据?Node.js节点mysql
- Dracula Graph js节点点击事件
- 如何公开JS节点模块
- Vis.js节点上的动画牛眼
- 添加“;三角形向上”;在d3.js节点中
- 验证请求参数的最佳方法是帆.js/节点.js
- 如何在新窗口中打开 Arbor.js 节点链接
- D3.js节点映射中的缩放功能
- 如何围绕焦点旋转 d3.js 节点
- 问.js节点承诺.“套接字”上缺少错误处理程序.类型错误:无法调用未定义的方法“then”
- 将数据返回到索引.js节点表达式
- 如何添加属性以 go.js 节点和重定向
- Js 节点 - socket.io 聊天修饰符
- 如何使用 JSON 图像作为 D3.js 节点背景
- 条件语句在 JS(节点)中没有响应
- Sigma JS节点动画
- 更改d3.js节点的填充颜色
- Arbor Js-节点单击
- 循环中的JS节点