不包含字符组的字符串

时间:2015-11-06 14:07:49

标签: javascript regex

我写了正则表达式,用于在文本中查找网址:

/(http[^\s]+)/g

但是现在我需要和那个相同,但是表达式不包含某些子字符串,例如我希望所有那些不包含单词google的网址。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

以下是实现这一目标的方法:

http:\/\/(?!\S*google)\S+

请参阅demo

JS:

var re = /http:\/\/(?!\S*google)\S+/g; 
var str = 'http://ya.ru http://yahoo.com http://google.com';
var m;
 
while ((m = re.exec(str)) !== null) {
    document.getElementById("r").innerHTML += m[0] + "<br/>";
}
<div id="r"/>

正则表达式细分:

  • http:\/\/ - http://
  • 的文字序列
  • (?!\S*google) - 从当前位置(即http://之后)执行前瞻检查的否定前瞻,如果找到0-or-more-non-spaces-heregoogle则匹配将被取消。< / LI>
  • \S+ - 一个或多个非空白符号(这是必要的,因为上面的前瞻并没有真正消耗它匹配的字符。)

请注意,如果您在网址后面有任何标点符号,则可以在模式的末尾添加\b

var re1 = /http:\/\/(?!\S*google)\S+/g; 
var re2 = /http:\/\/(?!\S*google)\S+\b/g; 
document.write(
  JSON.stringify(
    'http://ya.ru, http://yahoo.com, http://google.com'.match(re1)
  ) + "<br/>"
);

document.write(
  JSON.stringify(
    'http://ya.ru, http://yahoo.com, http://google.com'.match(re2)
  )
);