user13186
user13186

Reputation: 183

Find value when not between quotes

Using JavaScript & regex I want to split a string on every %20 that is not within quotes, example:

Here%20is%20"a%20statement%20"%20for%20Testing%20"%20The%20Values%20"
//easy to read version: Here is "a statement " for Testing " The Values "
                                ______________             ______________

would return

{"Here","is","a statement ","for","Testing"," The Values "}

but it seems my regex are no longer strong enough to build the expression. Thanks for any help!

Upvotes: 0

Views: 69

Answers (2)

Casimir et Hippolyte
Casimir et Hippolyte

Reputation: 89547

A way using the replace method, but without using the replacement result. The idea is to use a closure to fill the result variable at each occurence:

var txt = 'Here%20is%20"a%20statement%20"%20for%20Testing%20"%20The%20Values%20"';
var result = Array();

txt.replace(/%20/g, ' ').replace(/"([^"]+)"|\S+/g, function (m,g1) {
    result.push( (g1==undefined)? m : g1); });

console.log(result);

Upvotes: 1

hsz
hsz

Reputation: 152206

Just try with:

var input  = 'Here%20is%20"a%20statement%20"%20for%20Testing%20"%20The%20Values%20"',
    tmp    = input.replace(/%20/g, ' ').split('"'),
    output = []
;

for (var i = 0; i < tmp.length; i++) {
  var part = tmp[i].trim();
  if (!part) continue;

  if (i % 2 == 0) {
    output = output.concat(part.split(' '));
  } else {
    output.push(part);
  }
}

Output:

["Here", "is", "a statement", "for", "Testing", "The Values"]

Upvotes: 0

Related Questions