2013-03-18 149 views
-5

这2个在做什么? THX2个正则表达式字符串之间的区别

var m = document.referrer.match(/\&cd=([\d]*)/); 

var m = document.referrer.match(/cd=(.*?)&/); 

哪一个更有效?

+8

有效的是什么?他们不做同样的事情。 – 2013-03-18 16:49:10

+2

他们都希望在查询部分有一个带有'cd'参数的url,但是一个需要数字并且在其之前有其他查询参数。另一个允许任何值,但在它之后需要另一个查询参数。例如他们是相关的,但绝对不一样。 – 2013-03-18 16:50:23

+1

效率最高,效率最高的就是能够最快得到正确答案的答案。不知道你想要匹配谁的知识。 – 2013-03-18 16:52:03

回答

3

/\&cd=([\d]*)/ - 匹配任何以“& cd =”开头的字符串,后跟零个或多个十进制数字。第一个捕获组是十进制数字。

/cd=(.*)&/ - 开始与“CD =”后跟零个或多个字符直到并包括第一个“&”任何字符串匹配。第一个捕获组是“cd =”和“&”之间的所有字符。

它们是相似的,但不等同。你应该使用哪一个取决于你的确切需求。从您的评论看,这听起来像你想使用:

var m = document.referrer.match(/[?&]cd=(\d+)/); 
+1

'cd =(。*)&'将允许'garbagecd = something&'匹配,但是它排除了'cd =一些东西在最后。如果该值包含除数字之外的其他值,那么'\&cd =([\ d] *)'可能不会捕获cd键的全部值,并且也不包括'cd'是第一个键值对。 – nhahtdh 2013-03-18 17:00:32

+0

使用第一个给我很多0(零)值 - 在这种情况下这是不正常的。澄清 - 我从谷歌搜索结果网址中提取关键字排名值。对于之前未说明的道歉。 – user2022284 2013-03-18 17:01:30

+0

@ user2022284你是什么意思0值?它不匹配输入字符串?捕获组是空的?捕获的值是否为“0”? – 2013-03-18 17:07:13

相关问题