正则表达式网址问题

时间:2010-08-11 05:12:28

标签: regex actionscript-3 url

我正在使用这个正则表达式

((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’])) 

匹配网址(在这里找到http://daringfireball.net/2010/07/improved_regex_for_matching_urls它是最底层的),当我在动作脚本3中使用匹配时,它返回链接及其后的所有内容,所以如果我尝试了这个'hello http://www.apple.com world'它将返回'http://www.apple.com世界'我如何得到网址而不是'世界'部分。

1 个答案:

答案 0 :(得分:1)

这对我有用:

var match = "hello http://www.apple.com world".match(/\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/i)

就像这样:

var match = "hello http://www.apple.com world".match(new RegExp(
    "\\b((?:https?://|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)"+
    "(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\s()<>]+\\)))*\\))+"+
    "(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|"+
    "[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))",

    "i" // case insensitive
));

请记住字符串引用规则。如果您使用//引用正则表达式,就像第一个示例那样,那么您需要使用反斜杠转义文字/。如果你引用你的正则表达式"",那么你需要反斜杠转义所有"\,因为backsalsh本身在字符串中有意义。

另外,请记住,URL可以在您可以访问的第一个捕获组中捕获:

if (match) {
    url = match[1];
}

或者如果您提供全局标记g,那么匹配将是所有捕获的URL的数组。