2012-08-05 33 views
0

我工作的一个JavaScript从谷歌搜索URL中提取URL,像这样:这个正则表达式查找URL有什么问题?

http://www.google.com/search?client=safari&rls=en&q=thisisthepartiwanttofind.org&ie=UTF-8&oe=UTF-8 

现在,我的代码如下所示:

var checkForURL = /[\w\d](.org)/i; 
var findTheURL = checkForURL.exec(theURL); 

我跑这通过一对夫妇正则表达式测试,它似乎工作,但在实践中的字符串我得到恢复看起来像这样:

thisisthepartiwanttofind.org,.org 

那么,就这么尾随,.org未来FR OM?

我知道我的模式不是超级健壮的,但请不要建议使用更好的模式。我真的很喜欢关于这方面做了什么的建议。谢谢!

+2

'[\ w \ d]'没有意义。它只匹配一个字符(字母,数字或下划线) – mpen 2012-08-05 17:45:10

+0

你是对的!我忽略了后面的'+'。 – richrad 2012-08-05 17:51:34

+1

另外,'[\ w \ d]'与'\ w'完全相同。 '\ w'已经匹配数字,所以'\ d'是多余的。 – 2012-08-05 18:14:44

回答

1

删除小括号如果你不处理.org(不太可能,因为它是一个文字)。根据@Mark评论,添加+以匹配类[\w\d]的一个或多个字符。另外,我想逃脱点:

var checkForURL = /[\w\d]+\.org/i; 
+0

这样做了!谢谢! – richrad 2012-08-05 17:51:50

1

您应该在(.org)正则表达式组中转义.(DOT)或匹配任何字符。所以,你的正则表达式将变为:

/[\w\d]+(\.org)/ 

以匹配您的示例中的网址,你可以使用类似this

https?://([0-9a-zA-Z_.?=&\-]+/?)+ 

或一些更准确的像this(你应该选择正确的正则表达式根据您的需要):

^https?://([0-9a-zA-Z_\-]+\.)+(com|org|net|WhatEverYouWant)(/[0-9a-zA-Z_\-?=&.]+)$ 
1

你实际上得到的是2个结果的数组,第一个是整场比赛,第二个 - 您使用括号(.ORG)定义的组。

比较用:

 
/([\w\d]+)\.org/.exec('thisistheurl.org') 
→ ["thisistheurl.org", "thisistheurl"] 

/[\w\d]+\.org/.exec('thisistheurl.org') 
→ ["thisistheurl.org"] 

/([\w\d]+)(\.org)/.exec('thisistheurl.org') 
→ ["thisistheurl.org", "thisistheurl", ".org"] 

一个JS正则表达式的.exec的结果是一个字符串数组,第一个是在整个匹配并且通过使用括号所定义随后的代表组。如果在正则表达式中没有parens,那么这个数组中只会有一个元素 - 整个匹配。

+0

我明白了!感谢您的解释。 – richrad 2012-08-05 17:57:02

相关问题