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

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

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

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

这可能有助于检查您的正则expression式,以了解发生了什么事情。 这是原来的。

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

细节:

 .*? 

。 =任何东西,* =零或更多,和? =不贪心。

 ([\w\s-]*)+ 

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

 \/? 

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

所以基本上你要求匹配任何后面跟着一个可能是空的字符集,空格或破折号组,这些字符必须出现一次,可能跟在inputstring末尾的斜杠后面。 可变长度匹配.*([\w\s-]*)+在正则expression式引擎开始回溯时创build可能无限的匹配集。

你的expression式匹配null(空string),就像匹配-sub8一样,它匹配www.asite.com/clothes-intimates-bras-bralettes/sub5-sub6-sub7-sub8 。 或者它可以匹配。*? 然后是最后一个字符'8'的最后一个([\ w \ s-] *)俘获,然后是7000([\ w \ s-] *)对不起,我只是想让你直观的了解([] *)+风格捕捉的意义。

该expression式似乎是不正确地将您打算匹配到正则expression式模式的结果。 你想达到什么目的?