实际上我有以下RegExp表达式:
/^(?:(?:\,([A-Za-z]{5}))?)+$/g
因此,接受的输入应类似于,IGORA,但即使是,IGORA,GIANC,LOLLI也有效,在这种情况下,我可以将字符串切成3个组,其他情况下,组号应等于用户通过RegExp测试的输入。
我试图在JavaScript中执行类似的操作,但它仅返回最后一个值
var str = ',GIANC,IGORA';
var arr = str.match(/^(?:(?:\,([A-Za-z]{5}))?)+$/).slice(1);
alert(arr);
所以输出是“ IGORA”,而我希望它是“ GIANC”“ IGORA”
这是另一个例子
/^([A-Z]{5})(?:(?:\,([A-Za-z]{2}))?)+$/g
regexp的测试可能至少包含5个图表字符串,但也可以将其他5个图表字符串用逗号分隔,以便与输入
IGORA,CIAOA,POPOP
我将有一个["IGORA","CIAOA","POPOP"]
答案 0 :(得分:1)
您可以在由可选的前逗号或可选的尾随逗号包围的捕获中捕获单词。
您可以测试regex here:,?([A-Za-z]+),?
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);
答案 1 :(得分:0)
这是您要找的吗?
说明:
\b
单词边界(单词的开头或结尾)
\w
一个单词([A-z])
{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*|^)
后跟,
,后缀任意数量,或为列表中的第一个单词。
(?=,\s*|$)
,后跟,
和任意数量的尾部空格,或者是列表中的最后一个单词。
在下面的代码中,拒绝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*|$)
。
答案 2 :(得分:0)
还有其他方法可以执行此操作,但是我发现一种简单的方法是使用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(/^,/, '')
来解决此问题。