为什么这一行会导致Javascript崩溃?

时间:2014-05-28 02:52:00

标签: javascript regex node.js

Chrome / NodeJS中的这一行导致它崩溃。怎么样?

在Chrome中,它会导致浏览器标签挂起而没有错误消息。

"www.asite.com/clothes-intimates-bras-bralettes/sub5-sub6-sub7-sub8".replace(/.*?([\w\s-]*)+\/?$/, 'www.asite.com/product/$1')

1 个答案:

答案 0 :(得分:4)

可能有助于检查您的正则表达式,以了解正在发生的事情。这是原作。

.*?([\w\s-]*)+\/?$

分解:

.*?

。 =什么,* =零或更多,和? =非贪心。

([\w\s-]*)+

()=捕获,[] =一个组,\ w =字母数字,\ s =空格, - =破折号,* =零或更多,+ =一个或多个。

\/?

? =可能会也可能不会发生。

所以基本上你要求匹配任何东西后跟一个可能空的字符集,空格或破折号,它们必须出现一次,后面跟着一个锚点到输入字符串末尾的斜杠。变量长度匹配.* ([\w\s-]*)+在正则表达式引擎开始回溯时创建一组可能无限的匹配。

您的表达式匹配null(空字符串)以及匹配-sub8,以及匹配www.asite.com/clothes-intimates-bras-bralettes/sub5-sub6-sub7-sub8。或者它可以匹配。*?什么都没有,接着是7000([\ w \ s-] *)没有任何东西(记住*意味着什么),然后是最后一个字符'8'的最终([\ w \ s-] *)捕获......很抱歉,我只是想让您直观地了解([] *)+样式捕获的重要性。

表达式似乎是因为没有正确地将您想要匹配的内容正确地转换为正则表达式模式。你想要实现什么目标?