我写了正则表达式,用于在文本中查找网址:
/(http[^\s]+)/g
但是现在我需要和那个相同,但是表达式不包含某些子字符串,例如我希望所有那些不包含单词google
的网址。
我该怎么做?
答案 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)
)
);