正则表达式URL地址

时间:2016-02-22 07:31:20

标签: javascript regex

我的网址字符串:  https://stackoverflow.com/questions

我的正则表达式:[\w.]+

结果:["http","stackoverflow.com","questions"]

我如何忽略.* stackoverflow.com只有一个正则表达式。

我想要的结果:["http","stackoverflow","questions"]

1 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式捕获第1组中所有不在.之前的字母数字/下划线块:

/(?:^|[^.])\b(\w+)\b/g

请参阅the regex demo

故障:

  • (?:^|[^.]) - 匹配(但不存储在组缓冲区中)字符串的开头或任何字符但文字点
  • \b - 领先的字边界
  • (\w+) - 第1组捕获一个或多个单词字符
  • \b - 尾随字边界

示例代码:



var re = /(?:^|[^.])\b(\w+)\b/g; 
var str = 'http://stackoverflow.com/questions';
var res = [];
while ((m = re.exec(str)) !== null) {
    res.push(m[1]);
}
document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>";
&#13;
&#13;
&#13;

另一个解决方案基于以下假设:/不应跟随单词字符:

\b\w+\b(?!\/)

请参阅another regex demo

&#13;
&#13;
var re = /\b\w+\b(?!\/)/g; 
var str = 'http://stackoverflow.com/questions';
var res = str.match(re);
document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>";
&#13;
&#13;
&#13;

请注意,两个解决方案都需要一个单词边界才能正常工作,只有一个否定的字符类(#1)或一个前瞻(#2)自己不会工作(由于{{1},部分匹配将被拒绝}})。