我试图删除字符串中的逗号,除非它们出现在引号内。
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的新手,我只是专注于基础知识。)
答案 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)
这样可行,但对所有情况都不理想。示例:对于带有多于两个引号的字符串,它不起作用。
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;
答案 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);