正则匹配问题

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

// 注意这里的a,开头是很多很多很多的空白字符
var a = "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 故障原因:测绘一下啊<br>故障进展:"

console.time('compile')
var r = new RegExp('^\s*(?:<(p|div)(?:\s+[^>]*?)?>)?\s*(<span(?:\s+[^>]*?)?>\s*<\/span>|<br(?:\s+[^>]*?)?>|&nbsp;)*\s*(?:<\/\1>)?\s*$', 'i')
// a = '<span><br></span>'
var b = a.replace(r, "")
console.timeEnd('compile')
console.log(b)

console.time('test2')
var c = a.replace(/^\s*(?:<(p|div)(?:\s+[^>]*?)?>)?\s*(<span(?:\s+[^>]*?)?>\s*<\/span>|<br(?:\s+[^>]*?)?>|&nbsp;)*\s*(?:<\/\1>)?\s*$/i,"")
console.timeEnd('test2')
console.log(c)

这个运行结果如下:

clipboard.png

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

望各位大大指点:)

阅读 2.7k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题