javascript - 正则表达式,匹配以@开头的文本,但不带@

标签 javascript regex

我在 codecademy 学习正则表达式,在上一个练习中我需要创建 getDomainsOfEmails() 函数。

...和我 got this :

function getDomainsOfEmails(text) {
    var domains = /@[a-z0-9-]+\.[a-z0-9]+/g;
    return text.match(domains);
}

但理想情况下,该函数应返回不带“@”的域:

var emails = "";
emails += "washington.guedes@gmail.com ";
emails += "guedes@outlook.com ";
emails += "wg100@ig.com.br ";
console.log ( getDomainsOfEmails (emails));

我用循环解决了它:

function getDomainsOfEmails(text) {
    var domains = /@[a-z0-9_.]+\.[a-z0-9]+/g;
    var arr = text.match(domains);
    for (var i=0, l=arr.length; i<l; i++) {
        arr[i] = arr[i].substring(1);
    }
    return arr;
}

但我不喜欢我的方法,并且阅读 SO's Regex-wiki我找到了关于模式分隔符的说明:

(?:pattern) doesn't capture match

所以,我尝试了一下:

function getDomainsOfEmails(text) {
    var domains = /(?:@)[a-z0-9-]+\.[a-z0-9]+/g;
    return text.match(domains);
}

但是它continues返回“@”。

我做错了什么?

最佳答案

您可以在要保留的模式部分周围使用捕获组,但您需要使用 exec()循环中的方法,将捕获的匹配推送到数组。

另一种方法:

function getDomainsOfEmails(text) {
   var domains = /@[a-z0-9-]+\.[a-z0-9]+/g
   return text.match(domains).map(function(s) { return s.slice(1) })
}

eval.in

关于javascript - 正则表达式,匹配以@开头的文本,但不带@,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29702499/

相关文章:

javascript - 将 tex 命令(latex)转换为 mathml

javascript - 如何返回 HTML 中的 json 对象值列表的总和

javascript - JQuery 在没有插件的情况下对表进行排序

c# - 单击 asp 按钮获取下拉列表的值

regex - 去正则表达式 : how I can replace named groups by concrete values in source pattern?

javascript - 浏览器如何从innerHTML属性更新DOM?

c# - 匹配两个不同的字母

regex - linux + 不规则表达式查找机制(查找命令)或 perl

regex - Vim:匹配字符串的正则表达式

javascript - 使用 javascript 和 regex 检测多个 html 标签