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

Javascript 删除逗号,除非在引号内,不使用regexp,javascript,Javascript,我试图删除字符串中的逗号,除非它们出现在引号中 var mystring = "this, is, a, test, example, \"i, dont know\", jumps" ; var newchar = ''; mystring = mystring.split(',').join(newchar);// working correctly document.write(mystring); 我的输出是 这是一个“我不知道”跳跃的测试示例 预期产量 这是一个“我不知道”跳跃

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

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不熟悉,我只关注基本内容。)

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

var mystring=“这是一个测试,例如,“我不知道”,跳跃;
var newchar='389;';
mystring=mystring.match(/(“*?”|[^“,\s]+)(?=\s*,|\s*$)/g)。join(newchar);//工作正常
document.write(mystring);

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

var mystring=“这是一个测试,例如,“我不知道”,跳跃;
var newchar='389;';
mystring=mystring.match(/(“*?”|[^“,\s]+)(?=\s*,|\s*$)/g)。join(newchar);//工作正常
document.write(mystring);

这将起作用,但并非适用于所有情况。例如:它不适用于带两个以上引号的字符串

var mystring=“这是一个测试,例如,“我不知道”,跳跃;
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);
这将起作用,但并不适用于所有情况。例如:它不适用于带有两个以上引号的字符串

var mystring=“这是一个测试,例如,“我不知道”,跳跃;
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);
在字符串中循环,记住您是否在一组引号内,并构建一个新字符串,其中引号内的逗号不会添加到该字符串中:

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.
  }
}
var-inQuotes=false;//我们在引号内吗?
var result='';//我们将构建的新字符串。
对于(var i=0;i

与公认的解决方案相比,此解决方案的优点是,即使输入中有多个引号字符串,它也能正常工作。

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

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.
  }
}
var-inQuotes=false;//我们是内部报价吗?
变量结果=“”;//我们将建立新的字符串。
对于(var i=0;i

与公认的解决方案相比,此解决方案的优点是,即使输入中有多个引号字符串,它也能正常工作。

um,您需要一个reg exp…或者您必须编写一些不使用拆分的代码。正则表达式您的选项是:1)使用regex;2)编写一个小的解析器是否可以找到位置““是查找然后再对子字符串吗?输入中是否有多个带引号的字符串?”?顺便说一下,将来请使用更具描述性的问题标题。嗯,你需要一个reg exp。。。。或者您必须编写一些不使用拆分的代码。是正则表达式您的选项:1)使用正则表达式;2) 编写一个小的解析器是否可以找到“”的位置,然后将其子字符串化?输入中是否可以有多个带引号的字符串?顺便说一句,将来请使用更具描述性的问题标题。我们能找到“使用if”的索引吗?我感谢你对我的帮助。你能详细说明你的意思吗?现在代码找到了“使用if”的索引吗?我们能找到“使用if”的索引吗?只是想知道。我给了你最好的答案。谢谢,谢谢!若您想使用IF语句,那个么应该有一些您想要比较的值。我不知道你们会如何简单地使用if语句来查找任何你们还不知道的索引值。您可能需要将字符串转换为数组,然后查找indexOf数组是否有引号。我们是否可以使用if找到indexOf\?我感谢您对我的帮助。请详细说明您的意思?现在代码找到的索引是“”。我们是否可以使用if语句查找indexOf\?只是想知道。我给了你最好的答案。谢谢,谢谢!如果你想使用IF语句,应该有