【问题标题】:javascript need to do a right trimjavascript需要做一个正确的修剪
【发布时间】:2011-12-29 19:32:50
【问题描述】:

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

我有以下几点:

    var s1 = "this is a test~";

     var s = s1.rtrim('~') 

但是没有成功

【问题讨论】:

标签: javascript trim


【解决方案1】:

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

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

【讨论】:

  • 如果你想修剪空白,请执行s1 = s1.replace(/\s+$/, '')
【解决方案2】:

您可以根据需要修改字符串原型。修改字符串原型通常是不受欢迎的,但我个人更喜欢这种方法,因为它使代码更干净恕我直言。

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

然后调用...

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

【讨论】:

  • 不受欢迎是有原因的。不要这样做!
  • @Evert 为什么会这样?
  • @Javid 您正在污染全局命名空间,这可能会导致与其他命名空间发生冲突并破坏需要标准库的脚本。这样做的最大缺点是什么:rtrim(foo, s) vs foo.rtrim(s)
  • 这是 9 年前写的。我绝不建议今天修改String 的原型。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    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 '
    

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:
        str.trimEnd();
        str.trimRight();
        

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

        更多信息见下文:

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

        【讨论】:

        • 目前似乎所有真实浏览器都支持。请注意,trimEnd() 是与 padEnd() 一致的名称,而 trimRight() 保留为旧别名,以便与某些浏览器兼容。
        • 哦,拍吧,虽然问题是问如何修剪特定字符,而不是空格
        【解决方案7】:

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

        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'
        

        【讨论】:

          【解决方案8】:

          这是旧的,我知道。但我看不出 substr 有什么问题...?

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

          【讨论】:

          • 这里唯一的问题是字符串末尾可能有任意数量的字符...比如说this is test~而不是this is test~~~,甚至没有this is test。但是,您的案例确实可以很好地从字符串中修剪一组字符,而不管字符可能是什么
          猜你喜欢
          • 2012-08-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-03
          相关资源
          最近更新 更多