簡體   English   中英

如何從 JavaScript 字符串末尾修剪特定字符?

[英]How to trim specific characters from end of JavaScript string?

在 javascript 中,如何進行正確的修剪?

我有以下內容:

    var s1 = "this is a test~";

     var s = s1.rtrim('~') 

但沒有成功

使用正則表達式。 不要忘記轉義特殊字符。

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

Javascript 中沒有trim、ltrim 或rtrim 函數。 許多圖書館都提供它們,但通常它們看起來像:

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

對於正確的修剪,由於大多數瀏覽器中正則表達式處理結束字符的方式,以下通常比正則表達式更快:

function rtrim(str, ch)
{
    for (i = str.length - 1; i >= 0; i--)
    {
        if (ch != str.charAt(i))
        {
            str = str.substring(0, i + 1);
            break;
        }
    } 
    return str;
}

如果您願意,可以修改 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); 

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 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 '

使用正則表達式的解決方案:

"hi there~".replace(/~*$/, "")
str.trimEnd();
str.trimRight();

這些目前是第 4 階段的提案,預計將成為 ES2019 的一部分。 他們在 NodeJS 和幾個瀏覽器中工作。

請參閱下文了解更多信息:

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

這將從字符串的右側刪除指定的字符串或字符

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'

我的 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"
"///// = "
"/ = "

這是舊的,我知道。 但我不明白 substr 有什么問題...?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM