gpt4 book ai didi

Javascript string.match 拒绝返回包含多个匹配项的数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:49:25 25 4
gpt4 key购买 nike

我有一个字符串,我希望它的格式如下:

{List:[姓名:a,b,c][年龄:1,2,3]}

我的查询在 javascript 中看起来像这样:

var str = "{List:[Names:a,b,c][Ages:1,2,3]}";
var result = str.match(/^\{List:\[Names:([a-zA-z,]*)\]\[Ages:([0-9,]*)\]\}$/g);

注意:我知道使用此正则表达式它会通过“年龄:,,”之类的内容,但目前我并不担心。

我期待得到这个:

result[0] = "{List:[Names:a,b,c][Ages:1,2,3]}"
result[1] = "a,b,c"
result[2] = "1,2,3"

但无论我似乎对正则表达式做了什么,它都拒绝返回一个以上匹配的数组,我只是得到完整的字符串(因为它通过了,这是一个开始):

result = ["{List:[Names:a,b,c][Ages:1,2,3]}"]

我已经浏览了这里的一堆问题,以及其他“介绍”文章,但似乎没有一篇能解决这么基本的问题。我确定我忽略了一些愚蠢的事情,但我真的不知道它是什么:(

最佳答案

所以这是全局标志在 JavaScript 正则表达式中的应用方式的不同。

.match中,全局标志(末尾的/g)将返回正则表达式与字符串匹配的每个事件的数组。如果没有该标志,.match 将返回字符串中所有分组的数组。

例如:

var str = "{List:[Names:a,b,c][Ages:1,2,3]}";
str += str;
// removed ^ and $ for demonstration purposes
var results = str.match(/\{List:\[Names:([a-zA-z,]*)\]\[Ages:([0-9,]*)\]\}/g)
console.log(results)
// ["{List:[Names:a,b,c][Ages:1,2,3]}", "{List:[Names:a,b,c][Ages:1,2,3]}"]
str = "{List:[Names:a,b,c][Ages:1,2,3]}{List:[Names:a,b,c][Ages:3,4,5]}";
results = str.match(/\{List:\[Names:([a-zA-z,]*)\]\[Ages:([0-9,]*)\]\}/g);
console.log(results)
//["{List:[Names:a,b,c][Ages:1,2,3]}", "{List:[Names:a,b,c][Ages:3,4,5]}"]

现在,如果我们删除 /g 标志:

// leaving str as above
results = str.match(/\{List:\[Names:([a-zA-z,]*)\]\[Ages:([0-9,]*)\]\}/);
console.log(results)
//["{List:[Names:a,b,c][Ages:1,2,3]}", "a,b,c", "1,2,3"]

关于为什么 regex.exec 起作用的注释,that is because:

If the regular expression does not include the g flag, returns the same result as regexp.exec(string).

关于Javascript string.match 拒绝返回包含多个匹配项的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18318978/

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