佚名通过本文主要向大家介绍了正则表达式匹配问题,正则化问题,不适定问题正则化,正则匹配,php 正则匹配等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:正则匹配问题
描述:
解决方案1:
描述:
今天碰到一个对于我来说奇怪的问题,不知从何查起。在看源代码之前,先来这里问问。不多说,直接上代码。
// 注意这里的a,开头是很多很多很多的空白字符
var a = " 故障原因:测绘一下啊<br>故障进展:"
console.time('compile')
var r = new RegExp('^\s*(?:<(p|div)(?:\s+[^>]*?)?>)?\s*(<span(?:\s+[^>]*?)?>\s*<\/span>|<br(?:\s+[^>]*?)?>| )*\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+[^>]*?)?>| )*\s*(?:<\/\1>)?\s*$/i,"")
console.timeEnd('test2')
console.log(c)
这个运行结果如下:
疑惑的地方是new RegExp
这个做了什么,让正则运行效率这么高,跟使用.compile
效果差不多(隐含会编译?)。还有就是直接使用正则来replace
速度就慢很多,是因为没有编译的缘故吗?有什么好的文档可以看看?
望各位大大指点:)
解决方案1:
并没有效率高.
new RegExp
导致你正常写的正则的含义都变了.
你所看到的快, 是因为它压根就没匹配成功, 你第一个里面要求 开头和结尾都是字符 s
, 而你的数据中根本没有, 所以匹配失败, 当然时间就短了.
证明: