In JavaScript, how do I trim from the right(string end)?
I have the following example:
var s1 = "this is a test~";
var s = s1.rtrim('~');
In JavaScript, how do I trim from the right(string end)?
I have the following example:
var s1 = "this is a test~";
var s = s1.rtrim('~');
Use a RegExp. Don't forget to escape special characters.
s1 = s1.replace(/~+$/, ''); //$ marks the end of a string
// ~+$ means: all ~ characters at the end of a string
There are no trim, ltrim, or rtrim functions in Javascript. Many libraries provide them, but generally they will look something like:
str.replace(/~*$/, '');
For right trims, the following is generally faster than a regex because of how regex deals with end characters in most browsers:
function rtrim(str, ch)
{
let i = str.length;
while (i-- && str.charAt(i) === ch);
return str.substring(0, i + 1);
}
console.log(rtrim("moo", "x"));
console.log(rtrim("moo", "o"));
console.log(rtrim("oo", "o"));
You can modify the String prototype if you like. Modifying the String prototype is generally frowned upon, but I personally prefer this method, as it makes the code cleaner IMHO.
String.prototype.rtrim = function(s) {
return this.replace(new RegExp(s + "*$"),'');
};
Then call...
var s1 = "this is a test~";
var s = s1.rtrim('~');
alert(s);
IMO this is the best way to do a right/left trim and therefore, having a full functionality for trimming (since javascript supports string.trim
natively)
String.prototype.rtrim = function (s) {
if (s == undefined)
s = '\\s';
return this.replace(new RegExp("[" + s + "]*$"), '');
};
String.prototype.ltrim = function (s) {
if (s == undefined)
s = '\\s';
return this.replace(new RegExp("^[" + s + "]*"), '');
};
Usage example:
var str1 = ' jav '
var r1 = mystring.trim(); // result = 'jav'
var r2 = mystring.rtrim(); // result = ' jav'
var r3 = mystring.rtrim(' v'); // result = ' ja'
var r4 = mystring.ltrim(); // result = 'jav '
str.trimEnd();
str.trimRight();
These are currently stage 4 proposals expected to be part of ES2019. They work in NodeJS and several browsers.
See below for more info:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimEnd
This is old, I know. But I don't see what's wrong with substr...?
function rtrim(str, length) {
return str.substr(0, str.length - length);
}
This removes a specified string or character from the right side of a string
function rightTrim(sourceString,searchString)
{
for(;;)
{
var pos = sourceString.lastIndexOf(searchString);
if(pos === sourceString.length -1)
{
var result = sourceString.slice(0,pos);
sourceString = result;
}
else
{
break;
}
}
return sourceString;
}
Please use like so:
rightTrim('sourcecodes.....','.'); //outputs 'sourcecodes'
rightTrim('aaabakadabraaa','a'); //outputs 'aaabakadabr'
My 2 cents:
function rtrim(str: string, ch: string): string
{
var i:number = str.length - 1;
while (ch === str.charAt(i) && i >= 0) i--
return str.substring(0, i + 1);
}
const tests = ["/toto/", "/toto///l/", "/toto////", "/////", "/"]
tests.forEach(test => {
console.log(`${test} = ${rtrim(test, "/")}`)
})
Gives
"/toto/ = /toto"
"/toto///l/ = /toto///l"
"/toto//// = /toto"
"///// = "
"/ = "
You can add lodash library. It is a JavaScript utility library, There are some trim functions. You can use:
_.trimEnd('this is a test~', '~')