为什么这行会导致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式模式的结果。 你想达到什么目的?