Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.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:按逗号拆分字符串,但忽略引号中的逗号_Javascript_Regex_Csv_Split - Fatal编程技术网

Javascript:按逗号拆分字符串,但忽略引号中的逗号

Javascript:按逗号拆分字符串,但忽略引号中的逗号,javascript,regex,csv,split,Javascript,Regex,Csv,Split,我有一根像下面这样的线 var str="A,B,C,E,'F,G,bb',H,'I9,I8',J,K" 我想用逗号分隔字符串。但是,在单引号内的情况下,我需要它忽略逗号,如下所示 A B C E F,G,bb H I9,I8 J K 尽管您提出了这一要求,但您可能无法解释以下情况: 'bob's'是一个字符串,其中'被转义 a',c a、b a,b, ,a,b a,b' ,a,b ,a,b,c' 上述的一些问题是由这一机构正确处理的;其他人则不然。我强烈建议人们现在或

我有一根像下面这样的线

var str="A,B,C,E,'F,G,bb',H,'I9,I8',J,K"
我想用逗号分隔字符串。但是,在单引号内的情况下,我需要它忽略逗号,如下所示

 A
 B
 C
 E
 F,G,bb
 H
 I9,I8
 J
 K
尽管您提出了这一要求,但您可能无法解释以下情况:

  • 'bob's'
    是一个字符串,其中
    '
    被转义
  • a',c
  • a、b
  • a,b,
  • ,a,b
  • a,b'
  • ,a,b
  • ,a,b,c'
上述的一些问题是由这一机构正确处理的;其他人则不然。我强烈建议人们现在或将来(如果您扩展了代码,或者其他人使用它)使用一个经过深思熟虑的库,以避免出现诸如安全漏洞或细微错误之类的问题


正则表达式的解释:

  • ('[^']+'.[^,]+)
    -表示匹配
    '[^']+'
    [^,]+
  • “[^']+”
    表示引用…一个或多个非引用…引用
  • [^,]+
    表示一个或多个非逗号

注意:通过在无引号字符串之前使用带引号的字符串,我们可以更轻松地解析无引号字符串的大小写。

这是我的版本,它可以使用单引号和双引号,并且可以有多个带引号的字符串,并嵌入逗号。它给出的结果是空的,而且太多,所以你必须检查一下。没有经过严格的测试。请原谅过度使用“\”

var sample='this=that, \
sometext with quoted ",", \
for example, \
another \'with some, quoted text, and more\',\
last,\
but "" "," "asdf,asdf" not "fff\',\'  fff" the least';

var it=sample.match(/([^\"\',]*((\'[^\']*\')*||(\"[^\"]*\")*))+/gm);
for (var x=0;x<it.length;x++) {
var txt=$.trim(it[x]);
if(txt.length)
    console.log(">"+txt+'<');
}​
var sample='this=that\
带引号“,”的文本\
比如说,\
另一个“包含一些引用文本和更多内容”\
最后,\
但是“asdf,asdf”不是“fff”,至少是“fff”;
var it=sample.match(/([^\',]*((\'[^\']*\')*| |(\“[^\']*”)+/gm);
对于(var x=0;x使用此

            var input="A,B,C,E,'F,G,bb',H,'I9,I8',J,K";
            //Below pattern will not consider comma(,) between ''. So 'I9,I8' will be considered as single string and not spitted by comma(,). 
            var pattern = ",(?=([^\']*\'[^\']*\')*[^\']*$)";
            //you will get acctual output in array
            var output[] = input.split(pattern);

可能是重复的谢谢你,它对我有效。你提到的情况不影响me@gdoron:
('[^']+'.[^,]+)
-表示“匹配
'[^']+'
[^,]+
'[^']+'
表示“引用…一个或多个非引号…引用”。
[^,]+
表示“一个或多个非逗号”@gdoron:同样,通过在非引号字符串之前使用引号字符串,我们可以更轻松地解析非引号字符串大小写。虽然此代码片段可能会解决问题,包括一个解释,以提高您的帖子质量。请记住,您是在将来为读者回答问题,而不仅仅是现在提问的人!请注意r回答添加解释,并说明适用的限制和假设。
            var input="A,B,C,E,'F,G,bb',H,'I9,I8',J,K";
            //Below pattern will not consider comma(,) between ''. So 'I9,I8' will be considered as single string and not spitted by comma(,). 
            var pattern = ",(?=([^\']*\'[^\']*\')*[^\']*$)";
            //you will get acctual output in array
            var output[] = input.split(pattern);