Skip to content
Advertisement

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!

Advertisement

Answer

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]}"
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement