0

这将在 javascript 中多次在 HTML 位上运行。所有的 or 表达式都会使它变慢吗?可以优化吗?

\<[^\>]*?(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
4

3 回答 3

2

您可以使用此工具来比较不同的正则表达式

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

PS silverlight 插件是必需的

于 2013-10-07T19:31:50.227 回答
2

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

… (a|div|abbr| …

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

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

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

但你只需要测试才能看到。我以nytimes.com为例进行了jsperf 测试。

试验结果

于 2013-10-07T20:13:50.793 回答
0

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

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

于 2013-10-07T20:03:12.073 回答