我有以下正则表达式无效。我想匹配字符串'www.example.com',但不匹配字符串'http://www.example.com'(或'bothwww.example.com'):
/\bwww\.\w.\w/ig
这在JavaScript中使用:
text = text.replace(/\bwww\.\w.\w/ig, 'http://$&');
我知道正则表达式的第二部分也无法正常工作,但http://部分令我感到困惑。它目前与“http://www.example.com”匹配,从而产生“http://htpp://www.example.com”的输出。
答案 0 :(得分:4)
您是否在较大的字符串中搜索www.example.com
的出现位置?也许你可以更具体地说明你想要完全匹配的东西,但是这样的东西可能适合你:
text = text.replace(/(\s)(www\.\w+\.\w+)/ig, "$1http://$2");
\b
(与字词边界匹配)的问题在于它也在http://
和www
之间匹配,因为/
不是单词字符。
答案 1 :(得分:3)
这样做你想要的吗?锚点确保文本以www开头。但显然这会与其他子域失败。
text = text.replace(/^www\.\w+\.\w+$/ig, "http://$&");
编辑:感谢Chris Lutz的评论。我之前做过测试,但是一个奇怪的错误组合(缺少锚点,非转义点等)使它看起来很有效。我应该重申,无论如何这都是脆弱的。
答案 2 :(得分:2)
也许是这样的?
text = text.replace(/(^|\s)(www(?:\.\w+){2,})/ig, "$1http://$2");
这将匹配以下网址:
www.example.com
” - > “http://www.example.com
”Visit www.example.com
” - > “Visit http://www.exmaple.com
”Visit www.example.co.uk
” - > “Visit http://www.example.co.uk
”但不是:
http://www.example.com
”ftp.example.com
”www.com
”答案 3 :(得分:0)
您可以使用 ^ 指示符(锚点)要求文本匹配以 www 开头:
echo -e "http://www.example.com\nanythingwww.example.com\nwww.example.com" | grep "^www.example.com"
www.example.com
答案 4 :(得分:0)
你可以使用负面的lookbehind断言。类似......
(?<!http\:\/\/)(?:www.example.com)
击> <击> 撞击>