【问题标题】:Regex that only works on browser tester仅适用于浏览器测试器的正则表达式
【发布时间】:2012-11-16 00:54:09
【问题描述】:

我已经在Regex testers 上测试了我的正则表达式并且它有效,但我没有让它在我的代码上工作。

var mail = "chdelfosse@gmail.com";
var regExp = new RegExp("@(.*?)\.");
document.write(regExp.exec(mail)) ;

我得到了这个结果:

@g,

我尝试在点之前添加一个反斜杠,结果如下:

@gmail.,gmail

我还想删除“@”和“.”从电子邮件中,所以我尝试使用“ (?:@) ”,但我没有让它工作(在正则表达式测试人员上)。

这是我第一次尝试使用 Regex,但我不明白。 为什么有逗号?

【问题讨论】:

  • @g, 因为您的正则表达式匹配文字@,然后延迟匹配任何字符,在您的情况下为g,并且返回的数组有两个元素,它们是toString()'d,它使用join(),默认分隔符为,
  • @gdoron 我想取地址邮件的域名,所以“@”和“.”之间的所有内容
  • @alex 如果我不想要逗号怎么办?
  • @Pointy 不是.*? 的意思* 量词变得懒惰?
  • @alex 哦,是的,对;对于那个很抱歉。我度过了奇怪的一天 :-)

标签: javascript regex


【解决方案1】:

您可以使用这个正则表达式来获取域名:

/@(.+)\./

Live DEMO

【讨论】:

  • 试过了,但它没有返回任何东西。也不适用于正则表达式测试器。
  • @user1828310。您需要正确使用它...查看演示。
  • @user1828310。它为您提供第一个匹配的组 - 根据大括号匹配的字符,在这种情况下是没有 .suffix 的域名。
【解决方案2】:

比正则表达式更快:

var emailAddress = "my.email@gmail.com";
var array_email = emailAddress.split("@");​​
alert('Account: ' + array_email[0] +'; Domain: ' + array_email[1]);​​​​​​​​​​​​​​​​​​​​​​​​​​

【讨论】:

  • 也许更快,但没有按照他的要求做...... :)
  • 哦,我明白了...他对其进行了编辑并发表了评论...。:O我会提供一个更好的解决方案;-)
  • @salih0vicX 我测试了它,但它什么也没显示.. ?
  • @salih0vicX 哦,还有,我不想要“.com”部分
【解决方案3】:

做一些不同的事情:

  1. 您需要对字符串中的反斜杠进行双重转义,以便 RegExp 构造函数仍保留一个反斜杠,或切换到 /regex here/ 语法。
  2. 如果您只需要括号中的子组,则需要引用该特定子组。

代码如下:

var mail = "chdelfosse@gmail.com";
console.log(mail.match(/@(.*?)\./)[1]);

【讨论】:

  • 我试过了,它有点工作,但我得到“@gmail.,gmail”。我只喜欢一次,没有逗号。
  • @user1828310 - 我已经修改了答案以获得子组。
猜你喜欢
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多