var str = 'aaaaaaaaaabbbbbbbbbbcccccccccc(';
// 运行下面代码,浏览器会卡死,为何?
if (!/^\s*[a-zA-Z0-9]+(\s*[a-zA-Z0-9]+)*\s*$/.test(str)) {
alert('请输入英文');
}
// 奇怪的现象:如果把字符串中 cccccccccc 去掉,就没事了,怎么回事?
补充下需求:只允许内容是【字母、数字、空格】组合,但不能全部都是空格。
var str = 'aaaaaaaaaabbbbbbbbbbcccccccccc(';
// 运行下面代码,浏览器会卡死,为何?
if (!/^\s*[a-zA-Z0-9]+(\s*[a-zA-Z0-9]+)*\s*$/.test(str)) {
alert('请输入英文');
}
// 奇怪的现象:如果把字符串中 cccccccccc 去掉,就没事了,怎么回事?
补充下需求:只允许内容是【字母、数字、空格】组合,但不能全部都是空格。
问题出在(s[a-zA-Z0-9]+)这里,这种形式需要回溯次数指数上升,回溯太多次了,所以卡死。把ccccccc去掉后就没事是因为长度减少后,回溯次数也相应减少,所以不会卡死。Python中执行re.match(r'^([a-zA-Z0-9]+)*$', 'aaaaaaaaaabbbbbbbbbbcccccccccc(')
就可以看到卡死了。深入了解可以参考
一个错误的邮箱匹配正则表达式,回溯测试
7 回答2.6k 阅读✓ 已解决
12 回答4.9k 阅读✓ 已解决
16 回答5.4k 阅读
9 回答3k 阅读
7 回答3.6k 阅读✓ 已解决
10 回答2.7k 阅读
6 回答1.9k 阅读✓ 已解决