Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于捕获逗号分隔值的Regexp_Javascript_Regex_Split - Fatal编程技术网

Javascript 用于捕获逗号分隔值的Regexp

Javascript 用于捕获逗号分隔值的Regexp,javascript,regex,split,Javascript,Regex,Split,我有一个字符串,可以是以逗号分隔的\w列表,例如: abc123 abc123,def456,ghi789 我试图找到一个JavaScript regexp,它将返回['abc123'](第一种情况)或['abc123','def456','ghi789'](不带逗号) 我试过: ^(\w+,?)+$--不,因为只有最后一个重复模式将被匹配,789 ^(?(\w+)+$——同样的故事。我使用的是非捕获括号。然而,对于重复的单词,捕捉似乎并没有发生 我试图用regexp做的事情可能吗?我尝

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

  • abc123
  • abc123,def456,ghi789
我试图找到一个JavaScript regexp,它将返回
['abc123']
(第一种情况)或
['abc123','def456','ghi789']
(不带逗号)

我试过:

  • ^(\w+,?)+$
    --不,因为只有最后一个重复模式将被匹配,789
  • ^(?(\w+)+$
    ——同样的故事。我使用的是非捕获括号。然而,对于重复的单词,捕捉似乎并没有发生
我试图用regexp做的事情可能吗?我尝试了几乎所有的分组组合,使用捕获和非捕获括号,但仍然没有成功实现…

试试这个正则表达式:

'/([^,]+)/'
或者,javascript中的字符串有一个split方法,可以基于delimeter拆分字符串:

s.split(',')

可能您可以使用拆分功能

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

首先在逗号上拆分,然后筛选出不匹配的结果:

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

如果要在出现错误时放弃整个输入,最简单的方法是验证,然后拆分:

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循环,并自己断言最后一次匹配的位置,但如果有更干净的选项,为什么要这样做



如果您想对任何可用的字符进行savage,这是一个可行的选择。

此正则表达式模式在新行中分隔数值,新行中包含特殊字符,如
#

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;
变量列表=str.match(re);
文件。写入(“
list.length:+list.length”); 对于(变量i=0;i列表(“+i+”):“+list[i]);
}
string.split(“,”)有什么问题?
它将根据“,”进行拆分,而我想检查匹配项是否符合\w
=坏东西、好东西的预期输出是什么?您必须处理逗号分隔值中的转义机制吗?不,不需要转义。。。如果不满足要求,只需回答“否”\w如果有任何内容无效,您是否会放弃整个输入?或者你想保留什么?我确实想特别匹配。因此,我提出了([\w]*,?)(这也不会迫使我在最后有一个答案)。听起来不错?是的,但你不需要
*
@merc你在回答什么问题?