首页 > 解决方案 > 正则表达式问题(长字符串)

问题描述

我有 RegExp 条件是/^([0-9]*\.?[0-9])*$/测试字符串。我的字符串首先是1.2.840.346991791506342.1482500253171661(大字符串)和第二个是1.2.3.201922311129.10038(短字符串)。

它成功搜索,因为两个字符串都可以。

但是,当我在第二个字符串短字符串的最后一个添加空格时,它显示无效,这是正确的结论。

但是当我在第一个字符串中添加空格时,它应该根据代码显示无效字符串,但是它被挂起,为什么它显示挂起?

RegExp 限制已用尽?解决方案是什么?

您可以在 notepad+ 中进行检查以用于测试目的,^([0-9]*\.?[0-9])*$直接使用此公式。

标签: javascriptregex

解决方案


您编写正则表达式的方式,嵌套量词导致灾难性回溯导致它挂起/超时。

灾难性回溯演示

你需要将你的正则表达式简化为这样的东西,

^[0-9]*(?:\.[0-9]+)*$

让我知道这个正则表达式是否保留了您的模式。

正则表达式演示没有超时

通常,您应该避免在正则表达式中过度嵌套量词,而是尽可能尝试以更简单的方式编写它们。即使对于像这样的短字符串1.2.840.3469931313.313,请查看您的正则表达式执行了多少步骤,

已采取 135228 步

如果你稍微增加你的字符串长度,那么它就会陷入超时/灾难性的回溯。


推荐阅读