0

我正在使用 JavaScript 从 Google 搜索 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是从哪里来的呢?

我知道我的模式不是超级健壮,但请不要建议使用更好的模式。我真的很想就我在这个问题上做错了什么提出建议。谢谢!

4

3 回答 3

1

您实际上得到的是一个包含 2 个结果的数组,第一个是整个匹配,第二个是您使用 parens (.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 的结果是一个字符串数组,第一个是整个匹配项以及您使用括号定义的后续表示组。如果正则表达式中没有括号,则该数组中将只有一个元素 - 整个匹配。

于 2012-08-05T17:52:05.560 回答
1

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

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

要匹配示例中的 url,您可以使用以下内容:

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

或者像这样更准确的东西(您应该根据需要选择正确的正则表达式):

^https?://([0-9a-zA-Z_\-]+\.)+(com|org|net|WhatEverYouWant)(/[0-9a-zA-Z_\-?=&.]+)$
于 2012-08-05T17:44:25.967 回答
1

如果您不处理,请删除正则表达式中的括号.org(不太可能,因为它是文字)。根据@Mark 评论,添加一个+以匹配 class 的一个或多个字符[\w\d]。另外,我会避开点:

var checkForURL = /[\w\d]+\.org/i;
于 2012-08-05T17:44:31.250 回答