通过跳过拆分字符在javascript中拆分字符串
其结果如下:通过跳过拆分字符在javascript中拆分字符串,javascript,Javascript,其结果如下: var str = '"testStr, 10.0 pl",NA,4.6'; var rawLine = str.split(','); console.log(rawLine[0]); console.log(rawLine[1]); console.log(rawLine[2]); 我希望得到以下结果: ""testStr" "10.0 pl"" "NA" 您应该使用正则表达式:解析分隔符,如引号或括号、方括号等,但由于一些原因,尤其是引号最好使用CFG解析器,而不是正则表
var str = '"testStr, 10.0 pl",NA,4.6';
var rawLine = str.split(',');
console.log(rawLine[0]);
console.log(rawLine[1]);
console.log(rawLine[2]);
我希望得到以下结果:
""testStr"
"10.0 pl""
"NA"
您应该使用正则表达式:解析分隔符,如引号或括号、方括号等,但由于一些原因,尤其是引号最好使用CFG解析器,而不是正则表达式。但是它非常简单,并且按时完成,这与正则表达式相同,并且比您可能最终用于这类事情的不规则表达式要好,不过REs是原生的
"testStr, 10.0 pl"
"NA"
"4.6"
这可以扩展到解析单引号字符串和其他分隔符。您必须为非引号分隔符构建一个堆栈。我发布了一个修改后的版本,它在中同时处理单引号和双引号。如果您不想像另一个答案所建议的那样进行解析,我会在引号表达式和逗号上进行拆分:
function parseStrings(str){
var parse=[], inString=false, escape=0, end=0
for(var c=0; c<str.length; c++) switch(str[c]){
case '\\': escape^=1; break
case ',': if(!inString){
parse.push(str.slice(end, c))
end=c+1
}
escape=0
break
case '"': if(!escape) inString=!inString
default: escape=0 // fallthrough from previous case
}
if(inString) throw SyntaxError('expected matching " at the end of the string')
if(end<c) parse.push(str.slice(end, c))
return parse
}
我想根据逗号是否在带引号的字符串中来忽略逗号,这是正确的吗?是的,这是我在寻找的是的,这是这个问题的重复,但不幸的是,这里的答案不是很好,因为它忽略了转义引号的可能性“\”考虑使用JSON而不是您当前的字符串符号。这将\\,中断,\\,转义引号的问题是,任何偶数个反斜杠都不算,因此变为?:\\\\*\\
function split_string_on_commas_outside_quotes(str) {
return str .
// Replace escaped quotes; will put back later.
replace(/\\"/g, "__QUOTE__") .
// Split on quoted strings and commas, but keep in results.
// Use feature of split where groups are retained in result.
split(/(".*?"|,)/) .
// Remove empty strings and commas from result.
filter(function(piece) { return piece && piece !== ','; }) .
// Remove quotes at beginning and end of quoted pieces as you want.
map(function(piece) { return piece.replace(/^"|"$/g, '') }) .
// Restore escaped quotes.
map(function(piece) { return piece.replace(/__QUOTE__/g, "\\\""); })
;
}
>> var str = '"testS\"tr, 10.0 pl",NA,4.6'
>> split_string_on_commas_outside_quotes(str)
<< ["testS\"tr, 10.0 pl", "NA", "4.6"]