javascript需要做一个正确的修剪

Nat*_*Pet 28 javascript trim

在javascript中,如何进行正确的修剪?

我有以下内容:

    var s1 = "this is a test~";

     var s = s1.rtrim('~') 
Run Code Online (Sandbox Code Playgroud)

但没有成功

Rob*_*b W 67

使用RegExp.别忘了逃避特殊角色.

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

  • 如果要修剪空格,请执行 `s1 = s1.replace(/\s+$/, '')` (4认同)

Sco*_*t A 6

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

str.replace(/~*$/, '');
Run Code Online (Sandbox Code Playgroud)

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

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"));
Run Code Online (Sandbox Code Playgroud)


JP *_*son 6

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

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

然后打电话...

var s1 = "this is a test~";
var s = s1.rtrim('~');
alert(s); 
Run Code Online (Sandbox Code Playgroud)

  • 这是9年前写的。今天我绝不会建议修改“String”的原型。 (3认同)
  • @Javid您正在污染全局命名空间,这可能会导致与其他命名空间发生冲突并破坏需要标准库的脚本。这样做的最大缺点是什么: `rtrim(foo, s)` 与 `foo.rtrim(s)` ? (2认同)

Jav*_*vid 5

IMO 这是进行右/左修剪的最佳方法,因此具有完整的修剪功能(因为 javascriptstring.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 + "]*"), '');
};
Run Code Online (Sandbox Code Playgroud)

使用示例:

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 '
Run Code Online (Sandbox Code Playgroud)