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]}"