我的网址字符串: https://stackoverflow.com/questions
我的正则表达式:[\w.]+
结果:["http","stackoverflow.com","questions"]
我如何忽略.*
stackoverflow.com
只有一个正则表达式。
我想要的结果:["http","stackoverflow","questions"]
答案 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;
另一个解决方案基于以下假设:/
不应跟随单词字符:
\b\w+\b(?!\/)
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;
请注意,两个解决方案都需要一个单词边界才能正常工作,只有一个否定的字符类(#1)或一个前瞻(#2)自己不会工作(由于{{1},部分匹配将被拒绝}})。