W JavaScript, jak mogę zrobić właściwe wykończenia?

Mam:

    var s1 = "this is a test~";

     var s = s1.rtrim('~') 

Ale nie udało się

34
Nate Pet 15 listopad 2011, 23:08

7 odpowiedzi

Najlepsza odpowiedź

Użyj regexp. Nie zapomnij uniknąć znaków specjalnych.

s1 = s1.replace(/~+$/, ''); //$ marks the end of a string
                            // ~+$ means: all ~ characters at the end of a string
77
Rob W 15 listopad 2011, 19:10

Możesz zmodyfikować prototyp ciągów, jeśli chcesz. Modyfikowanie prototypu łańcucha jest ogólnie zmarszczony, ale osobiście preferowałem tę metodę, ponieważ sprawia, że kod czyszczący jest imho.

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

Wtedy zadzwoń...

var s1 = "this is a test~";
var s = s1.rtrim('~');
alert(s); 
4
JP Richardson 15 listopad 2011, 19:26

W JavaScript nie ma funkcji przycinania, LTRIM lub RTRIM. Wiele bibliotek zapewnia im, ale generalnie będą wyglądać jak:

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

W przypadku odpowiednich wykończeń następujący jest na ogół szybciej niż regex ze względu na to, jak regexa zajmuje się znakami końcowymi w większości przeglądarek:

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;
}
4
Scott A 17 czerwiec 2013, 15:50

Rozwiązanie przy użyciu wyrażenia regularnego:

"hi there~".replace(/~*$/, "")
3
wutz 15 listopad 2011, 19:11

IMO Jest to najlepszy sposób na wykonanie prawej / lewej przycinania, a zatem, mając pełną funkcjonalność do przycinania (ponieważ JavaScript obsługuje string.trim natywnie)

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

Przykład użycia:

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 '
3
Javid 2 styczeń 2017, 18:20
str.trimEnd();
str.trimRight();

Obecnie propozycje etapu 4 oczekuje się części ES2019. Pracują w NodeJs i kilku przeglądarkach.

Zobacz poniżej, aby uzyskać więcej informacji:

https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/string/trimend.

1
Adam Michalik 11 październik 2019, 16:58

To jest stare, wiem. Ale nie widzę, co jest nie tak z substr ...?

function rtrim(str, length) {
  return str.substr(0, str.length - length);
}
-1
Joshua Davison 30 lipiec 2014, 13:56