我有一个如下字符串
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
我有一个如下字符串
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
> str.match(/('[^']+'|[^,]+)/g)
["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 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);