哪个更快,XPath还是Regexp?

时间:2010-08-04 13:50:53

标签: javascript regex performance xpath firefox-addon

我正在为firefox制作一个附加组件,它使用ajax加载一个html页面(附加组件有它的XUL面板)。

现在,我没有搜索创建document对象的方法,并将ajax请求内容放入其中,然后使用xPath查找我需要的内容。
相反,我正在加载内容并将其解析为具有常规表达的文本。

但我有一个问题。哪个更好用,xPath或正则表达式?哪个更快表现?

HTML页面将由数百个包含相同文本的元素组成,我基本上想要做的是计算有多少元素。

我希望我的附加组件尽可能快地工作,我不知道regexp或xPath背后的机制,所以我不知道哪个更有效。

希望我很清楚。感谢

1 个答案:

答案 0 :(得分:17)

无论何时处理XML,都要使用XPath(或XSLT,XQuery,SAX,DOM或任何其他支持XML的方法来处理数据)。 Do never use regular expressions for this task

为什么呢? XML处理错综复杂,处理所有奇怪的事情,外部/解析/未解析的实体,DTD,处理指令,空格处理,折叠,unicode规范化,CDATA部分等使得非常难以创建可靠的正则表达式获取数据的途径。只考虑业界花了几年时间学习如何最好地解析XML,应该是不要试图自己做的理由。

回答你的问题:当谈到速度时(这应该是你的主要关注点),它在很大程度上取决于XPath或Regex编译器/处理器的实现。有时,XPath会更快(例如,在使用密钥时,如果可能,或编译XSLT),其他时候,正则表达式将更快(如果您可以使用预编译的正则表达式,并且您的查询很容易)。但是,HTML / XML的正则表达式绝非易事,因为匹配的嵌套括号(标记)问题,单凭正则表达式无法可靠地解决。

如果输入很大,正则表达式会更快,除非XPath实现可以进行流处理(我认为这不是Firefox中的方法)。

您写道:

  

“哪个更有效”*

能够让您最快速地实现可靠且稳定的实施,而且速度相对较快。使用XPath。如果您需要从浏览器运行代码,那么它也可以在Firefox和其他浏览器中使用。