Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅当http://不存在时,Regex才与www.example.com匹配_Javascript_Regex - Fatal编程技术网

Javascript 仅当http://不存在时,Regex才与www.example.com匹配

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开头。但显然,这将在其他子域中失败

我有以下不起作用的正则表达式。我想匹配字符串“www.example.com”,但不匹配字符串“”(或“anythingwww.example.com”):

这在JavaScript中使用如下:

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)