正则表达式捕获逗号分隔值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式捕获逗号分隔值相关的知识,希望对你有一定的参考价值。

我有一个字符串,可以是逗号分隔的w列表,例如:

  • ABC123
  • Eps 123,Dave 456,Geehs

我试图找到一个javascript regexp,它将返回['abc123'](第一个案例)或['abc123', 'def456', 'ghi789'](没有逗号)。

我试过了:

  • ^(w+,?)+$ - 不,因为只有最后一个重复模式匹配,789
  • ^(?:(w+),?)+$ - 同样的故事。我正在使用非捕获支架。然而,重复的单词似乎没有发生捕获

我正在尝试用regexp做什么?我尝试了几乎所有分组的组合,使用捕获和非捕获括号,但仍未设法实现这一点......

答案

如果你想在出现问题时丢弃整个输入,最简单的方法是验证,然后拆分:

if (/^w+(,w+)*$/.test(input)) {
    var values = input.split(',');

    // Process the values here
}

如果要允许空值,请将w+更改为w*

尝试使用单个正则表达式同时匹配和验证需要模拟G功能,该功能断言最后一个匹配的位置。为什么需要G?因为它会阻止引擎在下一个位置重试匹配并绕过验证。请记住,ECMA脚本正则表达式没有后视,因此您无法区分无效字符的位置和后面的字符:

something,=bad,orisit,cor&rupt
          ^^             ^^

如果无法区分这两个位置,则不能仅依赖引擎来进行全匹配操作。虽然可以使用RegExp.exec的while循环并自己断言最后一次匹配的位置,但为什么在有更清洁的选项时会这样做呢?


如果你想野蛮任何可用的东西,torazaburo's answer是一个可行的选择。

另一答案

Live demo

试试这个正则表达式:

'/([^,]+)/'

或者,javascript中的字符串有一个split方法,可以根据分隔符拆分字符串:

s.split(',')
另一答案

先在逗号上拆分,然后过滤掉不匹配的结果:

str.split(',').filter(function(s) { return /^w+$/.test(s); })
另一答案

这个正则表达式模式在新行中分隔数值,其中包含特殊字符,如.,#等。

var val = [1234,1213.1212, 1.3, 1.4]
var re = /[0-9]*[0-9]/gi;
另一答案

var str = "abc123,def456, asda12, 1a2ass, yy8,ghi789";
var re = /[a-z]{3}d{3}/g;
var list = str.match(re);
document.write("<BR> list.length: " + list.length);
for(var i=0; i < list.length; i++) {
	document.write("<BR>list(" + i + "): " +  list[i]);
}
另一答案

可能是你可以使用拆分功能

var st = "abc123,def456,ghi789";
var res = st.split(',');

以上是关于正则表达式捕获逗号分隔值的主要内容,如果未能解决你的问题,请参考以下文章

优化逗号分隔值正则表达式

正则表达式逗号分隔分隔符

用于验证数字逗号分隔值的 Java 正则表达式

正则表达式匹配两个或多个逗号分隔的整数

在逗号分隔的字母数字正则表达式中添加空格

正则表达式将数字转换为逗号分隔的数字,可选两位小数