user1162251
user1162251

Reputation: 21

javascript split with multi separator & returning used separator to array?

I have String

var t = '@qf$q>@gf';

and array of separators

var s = '@$>';

I would like to have a function which returns:

var a = f(t,s);
// a is array = ["@","qf","$","q",">","@","gf"];

Can you help me ?

Upvotes: 2

Views: 97

Answers (2)

ldiqual
ldiqual

Reputation: 15365

Here is your code:

var t = '@qf$q>@gf';
var s = '@$>';

var finalArray = [];
var tmpString = '';
var found = false;
for (var i=0; i<t.length; i++) {
  for (var j=0; j<s.length; j++) {
    if (t[i] == s[j]) {
      found = true;
      if (tmpString != '') {
        finalArray.push(tmpString);
      }
      finalArray.push(t[i]);
      tmpString = '';
    }
  }
  if (!found) {
    tmpString += t[i];
  }
  found = false;
}
if (tmpString != '') {
  finalArray.push(tmpString);
}

It will output:

["@", "qf", "$", "q", ">", "@", "gf"]

Here is the associated jsFiddle: http://jsfiddle.net/Cf8LA/


Edit: simplified version

var t = '@qf$q>@gf';
var s = '@$>';

var finalArray = [];
var tmpString = '';
for (var i=0; i<t.length; i++) {
  if (s.indexOf(t[i]) >= 0) {
    if (tmpString != '') {
      finalArray.push(tmpString);
    }
    finalArray.push(t[i]);
    tmpString = '';
  } else {
    tmpString += t[i];
  }
}
if (tmpString != '') {
  finalArray.push(tmpString);
}

Updated jsFiddle here: http://jsfiddle.net/Cf8LA/1/

Upvotes: 1

Gumbo
Gumbo

Reputation: 655219

You can use a regular expression:

'@qf$q>@gf'.match(/[@$>]|[^@$>]+/g)

The regular expression /[@$>]|[^@$>]+/g matches all occurrences of either a single separator character ([@$>]) or any sequence of one or more non-separator characters ([^@$>]+).

Upvotes: 3

Related Questions