patternjavascriptModerate
Trim certain characters from a string in JavaScript
Viewed 0 times
fromtrimjavascriptcharacterscertainstring
Problem
I want to remove not only spaces, but certain characters, as well from the beginning or end of a JavaScript string.
The function can be used as follows:
%%CODEBLOCK_1%%
The escaping is required as
function trim(str, characters) {
var c_array = characters.split('');
var result = '';
for (var i=0; i < characters.length; i++)
result += '\\' + c_array[i];
return str.replace(new RegExp('^[' + result + ']+|['+ result +']+
The function can be used as follows:
trim(' - hello** +', '+*- ');
The escaping is required as + * . etc. would be used in the regular expression. Is there a better way to trim any character in JavaScript? Or a better way to do the escaping, as not every character needs it?, 'g'), '');
}The function can be used as follows:
%%CODEBLOCK_1%%
The escaping is required as
+ * . etc. would be used in the regular expression. Is there a better way to trim any character in JavaScript? Or a better way to do the escaping, as not every character needs it?Solution
There are many different ways to tackle trimming strings, a regex is probably the most popular, and there are lots of blogs and performance tests out there, (one such blog), that you can look at and decide which is best.
So continuing along the lines that you have demonstrated, then this may be of some help to you.
Javascript
On jsfiddle
Of course, you can customise which characters you wish to escape, or flags to test for, as per your own needs. Regular Expressions
So continuing along the lines that you have demonstrated, then this may be of some help to you.
Javascript
/*jslint maxerr: 50, indent: 4, browser: true */
var trim = (function () {
"use strict";
function escapeRegex(string) {
return string.replace(/[\[\](){}?*+\^$\\.|\-]/g, "\\%%CODEBLOCK_0%%amp;");
}
return function trim(str, characters, flags) {
flags = flags || "g";
if (typeof str !== "string" || typeof characters !== "string" || typeof flags !== "string") {
throw new TypeError("argument must be string");
}
if (!/^[gi]*$/.test(flags)) {
throw new TypeError("Invalid flags supplied '" + flags.match(new RegExp("[^gi]*")) + "'");
}
characters = escapeRegex(characters);
return str.replace(new RegExp("^[" + characters + "]+|[" + characters + "]+$", flags), '');
};
}());
/*jslint devel: true */
console.log(trim(" - hello** +", "+*- "));On jsfiddle
Of course, you can customise which characters you wish to escape, or flags to test for, as per your own needs. Regular Expressions
Code Snippets
/*jslint maxerr: 50, indent: 4, browser: true */
var trim = (function () {
"use strict";
function escapeRegex(string) {
return string.replace(/[\[\](){}?*+\^$\\.|\-]/g, "\\$&");
}
return function trim(str, characters, flags) {
flags = flags || "g";
if (typeof str !== "string" || typeof characters !== "string" || typeof flags !== "string") {
throw new TypeError("argument must be string");
}
if (!/^[gi]*$/.test(flags)) {
throw new TypeError("Invalid flags supplied '" + flags.match(new RegExp("[^gi]*")) + "'");
}
characters = escapeRegex(characters);
return str.replace(new RegExp("^[" + characters + "]+|[" + characters + "]+$", flags), '');
};
}());
/*jslint devel: true */
console.log(trim(" - hello** +", "+*- "));Context
StackExchange Code Review Q#28464, answer score: 10
Revisions (0)
No revisions yet.