首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex:匹配url,但不匹配电子邮件域

Regex:匹配url,但不匹配电子邮件域
EN

Stack Overflow用户
提问于 2018-05-30 12:20:11
回答 3查看 1.8K关注 0票数 1

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

准确地说,我希望下面的匹配(匹配的字符串以粗体表示)

example.com试验 测试emailstring@myemail.com

我尝试过的任何解决方案都不包括emailstring并与myemail.com匹配。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-30 12:53:34

这里有一个两步的建议,使用regex replace和lambdas。第一个regex查找所有看起来像普通URL或电子邮件的内容,第二个regex则过滤出看起来像电子邮件地址的字符串:

代码语言:javascript
复制
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 example@example.com <- i don't want to match this\n" +
  "example@example.co.uk    <- 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);

票数 5
EN

Stack Overflow用户

发布于 2020-12-30 21:08:57

代码语言:javascript
复制
(:^|[^@\.\w-])([-\w:.]{1,256}\.[\w()]{1,6}\b)

有帮助,但我不知道为什么它也匹配额外的\

票数 0
EN

Stack Overflow用户

发布于 2021-10-19 11:54:30

我想你需要这样的东西:

代码语言:javascript
复制
const URL_INCLUDE_REGEX = /[(http(s)?):\/\/(www\.)?a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/ig;
const URL_EXCLUDE_REGEX = /.*@.*/;

第二种是排除电子邮件。最后的代码是:

代码语言:javascript
复制
const text = "My website is example.com";
// const text = "My email is test@example.com"; <- this will not be matched as there is email, not a url

let result = false;

text.replace(URL_INCLUDE_REGEX, (matchedText) => {
  if(!URL_EXCLUDE_REGEX.test(matchedText)) {
    result = true;
  }
});
return result;

结果将是truefalse

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50604549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档