Seth
Seth

Reputation: 37

Removing commas unless inside quotes, not using regexp

I am trying to remove commas in a string unless they appear inside quotes.

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

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


document.write(mystring);

Output I have is

this is a test example "i dont know" jumps

Expected output

this is a test example "i, dont know" jumps

A couple of questions. How can I find the index of string so that inside the quotation it will include comma but outside of quotation " it will not include comma ,. I know I have to use indexOf and substring but I don't know how to format it? (No regex please as I'm new to JavaScript and I'm just focusing on the basics.)

Upvotes: 1

Views: 103

Answers (3)

Riya
Riya

Reputation: 190

This will work, but it's not ideal for all cases. Example: It will not work for a string with more than 2 quotation marks.

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);

Upvotes: 1

user663031
user663031

Reputation:

Loop through the string, remembering whether or not you are inside a set of quotation marks, and building a new string to which the commas inside quotes are not added:

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.
  }
}

This solution has the advantage compared to the accepted one that it will work properly even if the input has multiple quotes strings inside it.

Upvotes: 3

eapo
eapo

Reputation: 1081

Some day you need to start using regexp, than regexr.com is your friend. The regexp solution is simple:

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);

Upvotes: 0

Related Questions