在javascript中测试正则表达式的最大字符串长度是多少?
what is max length of string to test regular expression in javascript
我使用以下正则表达式,如果我通过长度字符串检查,regex101.com显示超时消息。是否有理想的长度来测试正则表达式?
^('d+['s'r'n't,]*){1,100}$
https://regex101.com/r/eC5qO7/1 我建议运行分割,然后确保分割的是一个数字,所以:
var test = "123,456 789 101112 asdf";
var numbers = test.split(/'s*,'s*|'s+/);
numbers.forEach(function(n) {
if (n % 1 !== 0) {
alert(n + " is not an integer");
}
});
灾难性回溯是由于['s'r'n't,]
字符类对其应用了*
量词,然后对整个组设置了+
量词。regex回溯到每个数字来搜索可选的空格和逗号,这创造了大量的可能性,引擎在遇到"灾难"之前尝试。
此外,还有一个潜在的瓶颈:字符类中的's
也可以匹配'r
、'n
和't
。.
如果没有原子群和所有量词,正则表达式优化只能通过使其中一个"分隔符"成为强制性来实现。在这种情况下,它显然是一个逗号(从示例字符串判断)。由于您只想验证用逗号和可选空格分隔的输入数字的数量,因此可以使用更简单的正则表达式:
^(?:[0-9]+'s*,'s*){1,100}$
这里,它优雅地失败了,这里它匹配字符串OK。
如果逗号可选,则使用
^(?:'d+'s*,'s*){1,99}'d+,?'s*$
看到演示
还要注意,您不需要i
修饰符,因为模式中没有字母。
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- jQuery中是否内置了任何字符串格式化函数
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- ng打开空字符串
- 正则表达式在字符串中找到base64
- 计算输入中有多少逗号分隔的字符串
- 在JavaScript中,在对象上装箱每个数字和字符串的性能成本是多少
- 图像大小与其base64字符串转换长度之间的比率是多少
- 如何找到突出显示的字符串有多少次出现,以及它是哪个出现次数
- 如何在不排序的情况下使用JavaScript计算数组中有多少重复字符串
- 节点.js:字符串中有多少位
- 检查javascript中包含多少单词的字符串
- 传递字符串比传递对象隔离作用域快多少?
- 找出一个字符串中有多少个特定类型的字符
- 在javascript中测试正则表达式的最大字符串长度是多少?
- ECMAScript/JavaScript字符串中的每个字符消耗多少RAM ?
- url作为查询字符串中的值应该编码多少次?
- 我从Date.parse()得到的值是多少?通过Date.parse()将iso字符串解析回Javascript日期对象
- 计算一个数组中有多少字符串在同一数组中重复
- JavaScript字符串中字符的大小是多少?