这个正则表达式会慢吗?有没有办法优化它?

时间:2013-10-07 19:18:54

标签: javascript regex

这将在HTML上多次运行javascript。所有或表达式都会变慢吗?可以优化吗?

\<[^\>]*?(abbr|acronym|address|applet|area|article|aside|audio|base|basefont|bdi|bdo|big|blockquote|body|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dialog|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|head|header|hr|html|iframe|img|input|ins|kbd|keygen|label|legend|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|optgroup|option|output|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|source|strike|style|sub|summary|sup|textarea|time|title|track|tt|var|video|wbr)[^\>]*?\>/g

3 个答案:

答案 0 :(得分:2)

您可以使用this tool来比较不同的正则表达式

执行雅虎首页的源代码需要2.4秒。这不是一个科学的测试,但它看起来不是很有效。

PS silverlight插件是必需的

答案 1 :(得分:2)

您可以尝试将源代码中发现的非常元素名称(adiv)移到列表的前面:

… (a|div|abbr| …

另外,我认为您的模式会匹配,例如< notanabbreviation >。如果那不是您想要的,请尝试

<\b(a|abbr|…)\b[^>]*?>

交替之前的\b有助于因为它让引擎提前退出而不尝试所有的交替。

但你只需要测试看看。我以jsperf test using nytimes.com为例。

Test results

答案 2 :(得分:0)

在g之后添加i会使其不区分大小写

也因为它是javascript,也许你可以使用哈希而不是巨大的正则表达式