3 回答
TA贡献1846条经验 获得超7个赞
您可以捕获由可选的前一个逗号或可选的尾随逗号包围的捕获中的单词。
const pattern = /,?([A-Za-z]+),?/gm;
const str = `,IGORA,GIANC,LOLLI`;
let matches = [];
let match;
// Iterate until no match found
while ((m = pattern.exec(str))) {
// The first captured group is the match
matches.push(m[1]);
}
console.log(matches);
TA贡献1765条经验 获得超5个赞
还有其他方法可以做到这一点,但我发现其中一种简单方法是使用该replace方法,因为它可以替换与该正则表达式匹配的所有实例。
例如:
var regex = /^(?:(?:\,([A-Za-z]{5}))?)+$/g;
var str = ',GIANC,IGORA';
var arr = [];
str.replace(regex, function(match) {
arr[arr.length] = match;
return match;
});
console.log(arr);
此外,在我的代码片段中,您可以看到每个字符串中有一个额外的昏迷,您可以通过将第5行更改为来解决此问题arr[arr.length] = match.replace(/^,/, '')。
TA贡献1802条经验 获得超6个赞
这是你在找什么?
说明:
\b 单词边界(开始或结束单词)
\w 一句话([Az])
{5} 以前的5个字符
所以它匹配所有5个字符的单词但不匹配NANANANA
var str = 'IGORA,CIAOA,POPOP,NANANANA';
var arr = str.match(/\b\w{5}\b/g);
console.log(arr); //['IGORA', 'CIAOA', 'POPOP']
如果您只想选择逗号分隔的单词而不是其他内容,您可以像这样测试它们:
(?<=,\s*|^)前面,带有任意数量的尾随空格,OR是列表中的第一个单词。
(?=,\s*|$)后跟,和任意数量的尾随空格OR是列表中的最后一个单词。
在以下代码中,POPOP和MOMMA被拒绝,因为它们没有用逗号分隔,NANANANA失败,因为它不是5个字符。
var str = 'IGORA, CIAOA, POPOP MOMMA, NANANANA, MEOWI';
var arr = str.match(/(?<=,\s*|^)\b\w{5}\b(?=,\s*|$)/g);
console.log(arr); //['IGORA', 'CIAOA', 'MEOWI']
如果逗号后面不能有任何尾随空格,只需省略\s*两个(?<=,\s*|^)和(?=,\s*|$)。
添加回答
举报