user228720
user228720

Reputation: 103

Split String at specific character

I have the following code:

var string = "word1;word2;word3,word4,word5,word6.word7";

function ends_with(string, character) {
  var regexp = new RegExp('\\w+' + character, 'g');
  var matches = string.match(regexp);
  var replacer = new RegExp(character + '$');
  return matches.map(function(ee) {
    return ee.replace(replacer, '');
  });
}
// ends_with(string, ';') => ["word1", "word2"]

The function takes no regard to whitespace. For example if you input

ends_with('Jonas Sand,', ',')

the output will be Sand. Need help on making the function work with words that has whitespace.

Upvotes: 0

Views: 2895

Answers (4)

akuhn
akuhn

Reputation: 27793

\w matches word characters, use [^x] instead, where x is your character. This matches everything but your character.

So the first line in your function becomes

var regexp = new RegExp('[^' + character + "]+" + character, 'g');

on the other hand, if you want to match words separated by white space, use

var regexp = new RegExp('(\\w|\\s)+" + character, 'g');

 

PS: but isn't there a String#split function in javascript?

Upvotes: 2

aDev
aDev

Reputation: 314

Try using '[\\w\\s]+' instead of '\\w+' to include whitespace.

Upvotes: 1

Gumbo
Gumbo

Reputation: 655219

You can use your separator within split and take all except the last part with slice:

function ends_with(string, character) {
    return string.split(character).slice(0, -1);
}

Upvotes: 4

SLaks
SLaks

Reputation: 887355

Try the following:

var string = "word1;w ord2;word3,word4,word5,word6.word7";

function ends_with(string, character) {
    var regexp = new RegExp('.+' + character, 'g');
    var matches = string.match(regexp);
    var replacer = new RegExp(character + '$');
    return matches.map(function(ee) {
        return ee.replace(replacer, '');
    });
}

Upvotes: 0

Related Questions