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

Javascript 这个正则表达式会慢吗?有没有办法优化它?,javascript,regex,Javascript,Regex,这将在javascript中多次在HTML位上运行。所有的或表达式都会使它变慢吗?它能被优化吗 \<[^\>]*?(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|dia

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

\<[^\>]*?(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
\]*?(ABR)缩写词(ABR)缩写词(ABR)缩写词(ABR)缩写词(ABR)缩写词(ABR)缩写词(ABR)缩写词(ABR)缩写词(ABR)缩写词(缩写词(缩写词)缩写词(缩写词)地址(地址)地址(地址)小规模小规模(小规模)小规模(缩写词)小规模(ADB)缩写词(缩写词(缩写)音)音(缩写词(缩写词)音)音音音音(音)基地(基地)基)基(基)基)基(基)基)基(基)基)基字体(基)基)基字体(bdi(bdi(bdi)bdi(bdi)bdo(政政政政政政局)大,大,大,大,大(方)方方方,大,大,大,块(方(方)方(方)方(方)方(方)方(方)方(方)方(方)方(方)方(方124;字段集| figcaption |图形|字体|页脚|表格|框架|框架集|页眉|页眉| hr | html | iframe | img |输入| ins kbd |键根|标签|图例|链接|地图| ma(1244)货币基金会(1244)菜单,货币基金会(1244)菜单,货币基金会(1244)菜单,货币基金会(1244)菜单,货币基金会(1244)菜单,货币基金会(1244)菜单,货币基金会(1244)菜单,元元元,元,元,元,元,元,元,元,元,米,米,米,元,元,元,元,元,元,元,元,元,元,元,元,对象,对象,OPTG组,元,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,方,;wbr)[^\>]*?\>/g
您可以使用来比较不同的正则表达式

在雅虎首页的源代码上执行耗时2.4秒。这不是一项科学测试,但看起来效率不高

PS silverlight插件是必需的

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

在雅虎首页的源代码上执行耗时2.4秒。这不是一项科学测试,但看起来效率不高


PS silverlight插件是必需的

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


另外,由于它是javascript,也许你可以使用一个散列而不是一个巨大的正则表达式,在g之后添加i将使它不区分大小写


此外,由于它是javascript,您可能可以使用散列而不是大型正则表达式,您可以尝试将源代码中经常出现的元素名(
a
div
)移动到列表的前面:

… (a|div|abbr| …
此外,我认为您的模式会匹配,例如,
。如果这不是您想要的,请尝试

<\b(a|abbr|…)\b[^>]*?>
]*?>
交替之前的
\b
有帮助,因为它可以让引擎提前退出,而无需尝试所有交替

但你只需要测试一下就知道了。我举了一个例子


您可以尝试将源代码(
a
div
)中经常找到的元素名称移动到列表的前面:

… (a|div|abbr| …
此外,我认为您的模式会匹配,例如,
。如果这不是您想要的,请尝试

<\b(a|abbr|…)\b[^>]*?>
]*?>
交替之前的
\b
有帮助,因为它可以让引擎提前退出,而无需尝试所有交替

但你只需要测试一下就知道了。我举了一个例子


属于:为什么不自己运行一些测试呢?这样你可能会得到更准确的结果。除了不使用正则表达式解析HTML之外(毫无疑问,有人会发布),不可能判断这是否是上下文之外的问题。如果你调用一次,可能根本不值得担心,如果你在一个紧密循环中调用它一百万次,那么也许你应该这样做。你需要分析你的代码并确定瓶颈。如果你想让它快一个数量级,请使用字符串函数,而不是正则表达式…但如果它没有sn不需要更快,让它保持原样。你可以使用许多示例来测量不同浏览器中各种方法的速度。我不知道快还是慢,但它确实很难看。属于:为什么不自己运行一些测试?那样你可能会得到更准确的结果。除了不使用正则表达式解析HTML之外(毫无疑问,有人会发帖),不可能判断这是否是上下文之外的问题。如果你调用一次,可能根本不值得担心,如果你在一个紧密循环中调用它一百万次,那么也许你应该这样做。你需要分析你的代码并确定瓶颈。如果你想让它快一个数量级,请使用字符串函数,而不是正则表达式…但如果它没有sn不需要更快,保持原样。您可以使用许多示例来测量不同浏览器中各种方法的速度。我不知道快还是慢,但它确实很难看。Silverlight或Javascript是否运行正则表达式?Silverlight或Javascript是否运行正则表达式?谢谢,如果我使用\b(div|blah)\b[^>]*?>那么它不会不匹配,因为尖括号连接到标记名上并且不满足单词边界操作符?@JoeNFU No,
\b
匹配单词字符和非单词字符之间的边界,例如,
a
a
a在第一个和第二个字符之间都有一个单词边界。啊,是这样的e、 我在使用大斜杠时遇到了一些问题,但现在已经解决了。再次感谢,如果我能给你投两次票,我会:)谢谢,问题是如果我使用\b(div | blah)\b[^>]*?>那么它不会不匹配,因为尖括号连接到标记名上并且不满足单词边界操作符?@JoeNFU No,
\b
匹配单词字符和非单词字符之间的边界,例如,
a
a
a在第一个和第二个字符之间都有一个单词边界。啊,是这样的e、 我在领先的斜杠上遇到了一些问题,但现在已经解决了。再次感谢你,如果我能投你两次票,我会:)