gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 16:15:07 26 4
gpt4 key购买 nike

我在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com