如何从 JavaScript 字符串末尾删除特定字符?

问题描述 投票:0回答:10

在 JavaScript 中,如何从右侧(字符串末尾)修剪?

我有以下例子:

var s1 = "this is a test~";
var s = s1.rtrim('~');
javascript string trim
10个回答
97
投票

使用正则表达式。不要忘记转义特殊字符。

s1 = s1.replace(/~+$/, ''); //$ marks the end of a string
                            // ~+$ means: all ~ characters at the end of a string

6
投票

如果您愿意,您可以修改 String 原型。修改 String 原型通常是不受欢迎的,但我个人更喜欢这种方法,因为它使代码更干净恕我直言。

String.prototype.rtrim = function(s) { 
    return this.replace(new RegExp(s + "*$"),''); 
};

然后打电话...

var s1 = "this is a test~";
var s = s1.rtrim('~');
alert(s); 

6
投票

Javascript 中没有 trim、ltrim 或 rtrim 函数。许多图书馆都提供它们,但通常它们看起来像这样:

str.replace(/~*$/, '');

对于右修剪,以下内容通常比正则表达式更快,因为正则表达式在大多数浏览器中处理结束字符的方式:

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"));

5
投票

IMO,这是进行右/左修剪的最佳方法,因此具有完整的修剪功能(因为 javascript 本身支持

string.trim

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 + "]*"), '');
};

使用示例:

var mystring = '   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 '

3
投票

使用正则表达式的解决方案:

"hi there~".replace(/~*$/, "")

1
投票
str.trimEnd();
str.trimRight();

这些目前是第 4 阶段提案,预计将成为 ES2019 的一部分。它们可以在 NodeJS 和多种浏览器中工作。

请参阅下文了解更多信息:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimEnd


0
投票

我知道,这已经很旧了。但我不明白 substr 有什么问题...?

function rtrim(str, length) {
  return str.substr(0, str.length - length);
}

0
投票

这将从字符串右侧删除指定的字符串或字符

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;  
}

请像这样使用:

rightTrim('sourcecodes.....','.'); //outputs 'sourcecodes'
rightTrim('aaabakadabraaa','a');   //outputs 'aaabakadabr'

0
投票

我的2美分:

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, "/")}`)
})

给予

"/toto/ = /toto"
"/toto///l/ = /toto///l"
"/toto//// = /toto"
"///// = "
"/ = "

-1
投票

您可以添加 lodash 库。它是一个JavaScript实用程序库,有一些trim功能。您可以使用:

_.trimEnd('this is a test~', '~')
© www.soinside.com 2019 - 2024. All rights reserved.