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