一句屌炸天的正则,能把你浏览器整跪,node进程卡死
/^(\d|\w){40}$/.test('12123') //立即出结果 false
/^(\d|\w){40}$/.test('123444414213123123123123123123') //等了10几秒
如果字符串继续加长,效率会更慢
11 回复
/^(?=([\d\w]{40}))1円$/.test('123444414213123123123123123123')
或者
/^[\d\w]{40}$/.test('123444414213123123123123123123')
利用前瞻分组就可以了,前瞻分组直接匹配40个字母,失败直接丢弃,不会发生回溯 因为前瞻分组不会被捕获,所以使用反向引用匹配同一内容
这个回溯产生的原因不是因为量词嵌套,主要原因是^$之间的\d\w进行所有的组合匹配
/^\d{40}$/.test('123444414213123123123123123123')
就不会出现问题