猿问

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

实际上我有以下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"]


慕尼黑5688855
浏览 451回答 3
3回答

喵喵时光机

您可以捕获由可选的前一个逗号或可选的尾随逗号包围的捕获中的单词。你可以在这里测试正则表达式:,?([A-Za-z]+),?const pattern = /,?([A-Za-z]+),?/gm;const str = `,IGORA,GIANC,LOLLI`;let matches = [];let match;// Iterate until no match foundwhile ((m = pattern.exec(str))) {  // The first captured group is the match  matches.push(m[1]);}console.log(matches);

POPMUISE

还有其他方法可以做到这一点,但我发现其中一种简单方法是使用该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(/^,/, '')。

呼啦一阵风

这是你在找什么?说明:\b 单词边界(开始或结束单词)\w 一句话([Az]){5} 以前的5个字符所以它匹配所有5个字符的单词但不匹配NANANANAvar 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*|$)。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答