我正在使用这个正则表达式
((?: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世界'我如何得到网址而不是'世界'部分。
答案 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的数组。