正则表达式:匹配网址,但不匹配电子邮件域

博尔扎

我有一个非常宽松的正则表达式来匹配字符串中的任何类型的url:[a-z]+[:.].*?(?=\s|$)唯一的问题是,此正则表达式也将匹配电子邮件的域,而我想从匹配项中排除任何电子邮件地址。

确切地说,我确实想要以下匹配项(匹配的字符串以粗体显示)

测试example.com测试

测试[email protected]

我尝试过的任何解决方案都排除emailstring和匹配myemail.com

这是一个更完整的测试用例https://regex101.com/r/NsxzCM/3/

安德烈(Andrey Tyukin)

这是一个两步建议,将正则表达式replace与lambda结合使用。第一个正则表达式查找看起来像普通URL电子邮件的所有内容,然后第二个正则表达式过滤出看起来像电子邮件地址的字符串:

input = 
  "test\n" +
  "example.com\n" +
  "www.example.com\n" +
  "test sub.example.com test\n" +
  "http://example.com\n" +
  "test http://www.example.com test\n" +
  "http://sub.example.com\n" +
  "https://example.com\n" +
  "https://www.example.com\n" +
  "https://sub.example.com\n" +
  "\n" +
  "test [email protected] <- i don't want to match this\n" +
  "[email protected]    <- i don't want to match this\n" +
  "\n" +
  "git://github.com/user/project-name.git\n" +
  "irc://irc.undernet.org:6667/mIRC jhasbdjkbasd\n";

includeRegex = /(?:[\w/:@-]+\.[\w/:@.-]*)+(?=\s|$)/g ;
excludeRegex = /.*@.*/ ;

result = input.replace(includeRegex, function(s) {
  if (excludeRegex.test(s)) {
    return s; // leave as-is
  } else {
    return "(that's a non-email url: " + s +")";
  }
});

console.log(result);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

匹配电子邮件域部分的最佳正则表达式

正则表达式,用于与选定域匹配电子邮件

使用正则表达式匹配电子邮件地址

使用正则表达式匹配电子邮件地址

需要一个正则表达式来匹配电子邮件至:

用于将电子邮件地址与域匹配的正则表达式

通过URL匹配时,javascript正则表达式与电子邮件不匹配

grep基本正则表达式中与电子邮件匹配的正则表达式是什么?

jquery正则表达式匹配url和电子邮件

使用正则表达式匹配所有首字母小写的电子邮件?

使用 Python 正则表达式匹配字母数字单词、提及或电子邮件

正则表达式值与来自 CSV 的电子邮件 ID 不匹配

在Go中匹配网站中的正则表达式电子邮件

正则表达式匹配包含 * 和 [.] 的电子邮件

正则表达式匹配所有电子邮件,除了锚标记1内

匹配html字符串中的电子邮件正则表达式

正则表达式从电子邮件中提取匹配的文本和任何数字

正则表达式 - 将电子邮件地址与异常匹配

电子邮件正则表达式匹配 [点] 为“。” & [at] 代表“@”

匹配电话号码,正则表达式

正则表达式以匹配电影文件

正则表达式匹配电影torrent文件

正则表达式匹配电话模式逻辑

正则表达式-验证电子邮件域和完整电子邮件

正则表达式匹配网址

使用 JavaScript 正则表达式匹配完整单词时,排除电子邮件或 URL 中匹配的单词

如何匹配评论但不匹配网址?C#正则表达式

正则表达式验证具有特定域/子域的电子邮件

为什么此正则表达式与以下地址不匹配:电子邮件地址