javascript - 正则匹配问题
PHP中文网
PHP中文网 2017-04-10 16:02:28
[JavaScript讨论组]

今天碰到一个对于我来说奇怪的问题,不知从何查起。在看源代码之前,先来这里问问。不多说,直接上代码。

// 注意这里的a,开头是很多很多很多的空白字符
var a = "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 故障原因:测绘一下啊
故障进展:" console.time('compile') var r = new RegExp('^\s*(?:<(p|p)(?:\s+[^>]*?)?>)?\s*(]*?)?>\s*<\/span>|]*?)?>| )*\s*(?:<\/\1>)?\s*$', 'i') // a = '
' var b = a.replace(r, "") console.timeEnd('compile') console.log(b) console.time('test2') var c = a.replace(/^\s*(?:<(p|p)(?:\s+[^>]*?)?>)?\s*(]*?)?>\s*<\/span>|]*?)?>| )*\s*(?:<\/\1>)?\s*$/i,"") console.timeEnd('test2') console.log(c)

这个运行结果如下:

疑惑的地方是new RegExp这个做了什么,让正则运行效率这么高,跟使用.compile效果差不多(隐含会编译?)。还有就是直接使用正则来replace速度就慢很多,是因为没有编译的缘故吗?有什么好的文档可以看看?

望各位大大指点:)

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
迷茫

我也是个新手,我说说看自己的看法吧。

上面的那个r储存了一个正则对象,然后b使用replace的时候之所以会快不就是因为匹配规则早已被储存在r中了嘛~
而下面的c则是直接使用了正则,所以就慢咯,所以你的想法是对的。

反正我写正则一般就是习惯先把正则储存在一个变量中,然后再写下面的东西。
其实不仅是正则,无论什么东西,先存在一个自己命名的变量里,这样要用的时候方便快捷,计算机也省心,尤其是遇到要复用的东西,这点更加重要了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号