为了账号安全,请及时绑定邮箱和手机立即绑定

如何在RegEx中对可选参数进行切片?

如何在RegEx中对可选参数进行切片?

慕尼黑5688855 2019-04-18 13:15:46
实际上我有以下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}))?)+$/gregexp的测试可能至少有5个图表字符串,但它也可以用其他5个图表字符串用逗号分隔,所以从输入IGORA,CIAOA,POPOP我会有一个数组 ["IGORA","CIAOA","POPOP"]
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

您可以捕获由可选的前一个逗号或可选的尾随逗号包围的捕获中的单词。

你可以在这里测试正则表达式,?([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);


查看完整回答
反对 回复 2019-05-17
?
POPMUISE

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(/^,/, '')。


查看完整回答
反对 回复 2019-05-17
?
呼啦一阵风

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*|$)。


查看完整回答
反对 回复 2019-05-17
  • 3 回答
  • 0 关注
  • 450 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信