Javascript正则表达式文件类型崩溃chrome
Javascript regex filetype crashes chrome
我在尝试匹配末尾包含图像文件扩展名的url时遇到了一个奇怪的问题。regex-im-using非常简单(没有url验证,但第一次迭代就可以了)。
我已经架起了一把小提琴,它应该比我用语言解释得更好。在这里看小提琴:
http://jsfiddle.net/Vwat2/1/
注:
- 确保在铬中进行测试
- 确保已为chrome打开任务管理器(设置图标>工具>任务管理器)
- 运行jsfiddle,在您将url复制到文本区域后3秒,末尾没有文件扩展名匹配的regex将启动,并且会正常),3秒后,具有文件扩展名的regex会启动,如果它影响到您,则文本不会更改为已启动,您将看到jsfiddl占用任务管理器中的CPU
希望有人能解释一下这里发生了什么,我已经在PHP和expresso中运行了regex,它没有任何问题,所以我不认为它卡在某种regex内部循环或任何东西中。
感谢的帮助
编辑:这是一个精简版,更像我在应用程序中使用它(我从第一把小提琴上去掉了计时器和其他助手)。
http://jsfiddle.net/A96Mw/1/
两个词:灾难性回溯:
(?:[^ ]+)+'.
是一个无用的构造——[^ ]+'.
完全匹配,不容易回溯。
通过嵌套这两个量词,您将在运行时得到不以句点结束的字符串的指数增长。一些浏览器可能会选择在数百万次循环后中止正则表达式匹配,而其他浏览器(如Chrome)则会继续尝试。
由于以下表达式,似乎是灾难性回溯的情况:(?:[^ ]+)+
。不知道为什么第一个有效,而第二个无效。
您想要的正则表达式是
url = new RegExp("https?://(?:[^ ]+)''.", "i")
// or
url = /https?:'/'/(?:[^ ]+)+'./i
和
imgurl = new RegExp("https?://(?:[^ ]+)''.(?:jpe?g|gif|png)", "i")
// or
imgurl = /https?:'/'/(?:[^ ]+)+'.(?:jpe?g|gif|png)/i
相关文章:
- Chrome在尝试从Javascript修改CSS3动画时崩溃
- Javascript正则表达式文件类型崩溃chrome
- 使用SoundJS离开网页会导致Google Chrome崩溃
- 如果我刷新几次,为什么我的应用程序会在Chrome中崩溃
- 使用 for 循环用整数序列填充数组,而不会使 Chrome 崩溃
- JavaScript 冻结/崩溃在 Chrome 中
- 如果 Chrome 扩展程序崩溃,如何让另一个扩展程序重新加载崩溃的扩展程序
- Chrome 在执行正则表达式匹配时崩溃
- JavaScript SetTimeOut永远不会触发函数并使Chrome崩溃
- 将大约 300 张画布图像保存在一个数组中并发送一次进行处理,在 chrome 中崩溃,但在 Firefox 中工作正常
- D3中的脚本.js使Chrome崩溃
- chrome崩溃与javascript中java的方法调用
- 解决Canvas在Google Chrome 29中崩溃的问题
- SVG中的弯曲文本会使Chrome崩溃
- chrome.windows.onFocusChanged.addListener在关闭chrome时启动,插件崩溃
- 图像上传、调整大小和编码到base64会使Chrome在手机上崩溃
- Web工作程序在传递具有数组缓冲区的大型对象数组时会崩溃Chrome选项卡
- 为什么这个“范围”实现会在chrome中崩溃选项卡
- 如何显示长文本而不崩溃Chrome
- 简单的语音合成js崩溃Chrome到Aw快照屏幕