删除逗号,除非在引号内,不使用regexp

时间:2017-01-25 01:06:31

标签: javascript

我试图删除字符串中的逗号,除非它们出现在引号内。

var mystring = "this, is, a, test, example, \"i, dont know\", jumps" ;
var newchar = '';

mystring = mystring.split(',').join(newchar);// working correctly


document.write(mystring);

我的输出是

  

这是一个测试示例"我不知道"跳

预期输出

  

这是一个测试示例"我,不知道"跳

几个问题。如何找到字符串索引,以便在引号内包含逗号,但在引号"之外,它不会包含逗号,。我知道我必须使用indexOf和substring,但我不知道如何格式化它? (请不要使用正则表达式,因为我是JavaScript的新手,我只是专注于基础知识。)

3 个答案:

答案 0 :(得分:2)

循环遍历字符串,记住您是否在一组引号内,并构建一个新的字符串,其中未添加引号内的逗号:

var inQuotes = false;                      // Are we inside quotes?
var result = '';                           // New string we will build.

for (var i = 0; i < str.length; i++) {     // Loop through string.
  var chr = str[i];                        // Extract character.
  var isComma = chr === ',';               // Is this a comma?
  var isQuote = chr === '"';               // Is this a quote?

  if (inQuotes || !isComma) {              // Include this character?
    if (isQuote) inQuotes = !inQuotes;     // If quote, reverse quote status.
    result += chr;                         // Add character to result.
  }
}

与已接受的解决方案相比,此解决方案具有以下优势:即使输入内部有多个引号字符串,它也能正常工作。

答案 1 :(得分:1)

这样可行,但对所有情况都不理想。示例:对于带有多于两个引号的字符串,它不起作用。

&#13;
&#13;
var mystring = "this, is, a, test, example, \"i, dont know\", jumps" ;
var newchar = '';
var firstIndex = mystring.indexOf("\"");
var lastIndex = mystring.lastIndexOf("\"");
var substring1 = mystring.substring(0,firstIndex).split(',').join(newchar);
var substring2 = mystring.substring(lastIndex).split(',').join(newchar);
mystring = substring1 + mystring.substring(firstIndex, lastIndex) + substring2;

document.write(mystring);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

有一天你需要开始使用regexp,而regexr.com是你的朋友。 regexp解决方案很简单:

var mystring = "this, is, a, test, example, \"i, dont know\", jumps" ;
var newchar = '_';

mystring = mystring.match(/(".*?"|[^",\s]+)(?=\s*,|\s*$)/g).join(newchar);// working correctly

document.write(mystring);