javascriptstringtrim

Trim specific character from a string


What's the JavaScript equivalent to this C# Method:

var x = "|f|oo||"; 
var y = x.Trim('|'); //  "f|oo"

C# trims the selected character only at the beginning and end of the string!


Solution

  • One line is enough:

    var x = '|f|oo||';
    var y = x.replace(/^\|+|\|+$/g, '');
    document.write(x + '<br />' + y);

    ^     beginning of the string
    \|+   pipe, one or more times
    |     or
    \|+   pipe, one or more times
    $     end of the string
    

    A general solution:

    function trim (s, c) {
      if (c === "]") c = "\\]";
      if (c === "^") c = "\\^";
      if (c === "\\") c = "\\\\";
      return s.replace(new RegExp(
        "^[" + c + "]+|[" + c + "]+$", "g"
      ), "");
    }
    
    chars = ".|]\\^";
    for (c of chars) {
      s = c + "foo" + c + c + "oo" + c + c + c;
      console.log(s, "->", trim(s, c));
    }

    Parameter c is expected to be a character (a string of length 1).

    As mentionned in the comments, it might be useful to support multiple characters, as it's quite common to trim multiple whitespace-like characters for example. To do this, MightyPork suggests to replace the ifs with the following line of code:

    c = c.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&');
    

    This part [-/\\^$*+?.()|[\]{}] is a set of special characters in regular expression syntax, and $& is a placeholder which stands for the matching character, meaning that the replace function escapes special characters. Try in your browser console:

    > "{[hello]}".replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')
    "\{\[hello\]\}"