Javascript 仅当http://不存在时,Regex才与www.example.com匹配
我有以下不起作用的正则表达式。我想匹配字符串“www.example.com”,但不匹配字符串“”(或“anythingwww.example.com”): 这在JavaScript中使用如下:Javascript 仅当http://不存在时,Regex才与www.example.com匹配,javascript,regex,Javascript,Regex,我有以下不起作用的正则表达式。我想匹配字符串“www.example.com”,但不匹配字符串“”(或“anythingwww.example.com”): 这在JavaScript中使用如下: text = text.replace(/\bwww\.\w.\w/ig, 'http://$&'); 我知道正则表达式的第二部分也不能正常工作,但让我困惑的是http://部分。它当前将与“”匹配,从而产生“”的输出。这是否符合您的要求?锚定确保文本以www开头。但显然,这将在其他子域中失败
text = text.replace(/\bwww\.\w.\w/ig, 'http://$&');
我知道正则表达式的第二部分也不能正常工作,但让我困惑的是http://部分。它当前将与“”匹配,从而产生“”的输出。这是否符合您的要求?锚定确保文本以www开头。但显然,这将在其他子域中失败
text = text.replace(/^www\.\w+\.\w+$/ig, "http://$&");
编辑:由于Chris Lutz的评论而修复。我之前做过测试,但一系列奇怪的错误(缺少锚、未替换的点等)让它看起来很有效。我应该重申,这是脆弱的。您可以使用^indicator(锚定)要求文本匹配以www开头:
您是否正在搜索较大字符串中出现的
www.example.com
?也许你可以更具体地说明你想要匹配的是什么,但类似的东西可能适合你:
text = text.replace(/(\s)(www\.\w+\.\w+)/ig, "$1http://$2");
\b
(匹配单词边界)的问题是它在http://
和www
之间也匹配,因为/
不是单词字符。可能是这样的吗
text = text.replace(/(^|\s)(www(?:\.\w+){2,})/ig, "$1http://$2");
这将与以下网址相匹配:
- “
”->“www.example.com
”http://www.example.com
- “
”->“访问www.example.com
”访问http://www.exmaple.com
- “
”->“访问www.example.co.uk
”访问http://www.example.co.uk
- “
”http://www.example.com
- “
”ftp.example.com
- “
”www.com
(?<!http\:\/\/)(?:www.example.com)
(?
否。根据您的正则表达式实现,您可能需要转义“.”并在“\w”后添加“+”。JavaScript正则表达式不支持lookbehinds。不幸的是,JavaScript不支持lookbehind表达式。布拉赫!不知道这一点……抱歉!澄清一点:\b匹配当且仅当一侧的字符匹配\w和时匹配另一侧的字符匹配\W(字符串匹配的开头和结尾之前的假想字符\W)。请注意,任何人如果想将上述正则表达式用于具有路径的URL,则不会选择该路径。请尝试以下操作:/(^ | \s)(www(?:\.-.-a-Z0-9+&@#\/%?=~~|!:,.;]*[-a-Z0-9+&~-/%=~~-/%{2,})/ig
text = text.replace(/(^|\s)(www(?:\.\w+){2,})/ig, "$1http://$2");
(?<!http\:\/\/)(?:www.example.com)