Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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 - Fatal编程技术网

通过跳过拆分字符在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"]