javascript - 正则表达式问题(长字符串)
问题描述
我有 RegExp 条件是/^([0-9]*\.?[0-9])*$/
测试字符串。我的字符串首先是1.2.840.346991791506342.1482500253171661
(大字符串)和第二个是1.2.3.201922311129.10038
(短字符串)。
它成功搜索,因为两个字符串都可以。
但是,当我在第二个字符串短字符串的最后一个添加空格时,它显示无效,这是正确的结论。
但是当我在第一个字符串中添加空格时,它应该根据代码显示无效字符串,但是它被挂起,为什么它显示挂起?
RegExp 限制已用尽?解决方案是什么?
您可以在 notepad+ 中进行检查以用于测试目的,^([0-9]*\.?[0-9])*$
直接使用此公式。
解决方案
您编写正则表达式的方式,嵌套量词导致灾难性回溯导致它挂起/超时。
你需要将你的正则表达式简化为这样的东西,
^[0-9]*(?:\.[0-9]+)*$
让我知道这个正则表达式是否保留了您的模式。
通常,您应该避免在正则表达式中过度嵌套量词,而是尽可能尝试以更简单的方式编写它们。即使对于像这样的短字符串1.2.840.3469931313.313
,请查看您的正则表达式执行了多少步骤,
如果你稍微增加你的字符串长度,那么它就会陷入超时/灾难性的回溯。
推荐阅读
- asp.net-mvc - 不同实体类型的局部视图模型
- javascript - 如何使用 javascript/jquery 在更改时写入所有输入类型值?
- ios - Xcode 10 - 多个命令生成 .app
- css - 如何使用 SASS 为不同的网格列和断点自定义 Bootstrap 4?
- angular-material - 如何使用 matSort 对 mat-table 中的列进行排序?
- postgresql - 如何在 postgres 中处理并发请求?
- docker - 用于 dotnet core 2.1 和 IIS 的 Docker 映像
- javascript - 如何在反应js中的对象数组中添加一个对象
- amazon-web-services - 使用 Grunt 部署到 AWS Lambda
- r - 在 R 中查找数据帧的有效方法