【问题标题】:String strip() for JavaScript? [duplicate]JavaScript的字符串条()? [复制]
【发布时间】:2016-05-15 04:56:43
【问题描述】:

什么是从字符串中去除前导和尾随空格的干净高效的 JavaScript 实现?

例如:

" dog"

"dog "

" dog "

" dog "

全部变成

"dog"

【问题讨论】:

标签: javascript trim strip


【解决方案1】:

来自MDN 的更好的polyfill,支持删除BOMNBSP

if (!String.prototype.trim) {
  String.prototype.trim = function () {
    return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
  };
}

请记住,修改内置原型会带来性能损失(由于 JS 引擎放弃了许多运行时优化),并且在性能关键的情况下,您可能需要考虑替代定义 myTrimFunction(string) .话虽如此,如果您的目标是不支持原生 .trim() 的旧环境,您可能需要处理更重要的性能问题。

【讨论】:

    【解决方案2】:

    对于jquery用户,$.trim(s)怎么样

    【讨论】:

      【解决方案3】:

      如果您已经在使用 jQuery,那么您可能想看看 jQuery 已经提供的jQuery.trim()

      【讨论】:

        【解决方案4】:

        Gumbo 已经在评论中指出了这一点,但作为答案需要重复:trim() 方法是在 JavaScript 1.8.1 中添加的,并且被所有现代浏览器(Firefox 3.5+、IE 9、Chrome 10、Safari)支持5.x),虽然 IE 8 和更早版本不支持它。用法很简单:

         "  foo\n\t  ".trim() => "foo"
        

        另见:

        【讨论】:

          【解决方案5】:

          如果您不是编写新代码来修剪字符串,而是查看调用“strip()”的现有代码并想知道它为什么不起作用,您可能想检查它是否尝试包含类似prototypejs 框架,并确保它确实被加载了。
          该框架为所有 String 对象添加了一个 strip 函数,但如果例如你升级了它,你的网页仍然引用旧的 .js 文件,它当然不能工作。

          【讨论】:

            【解决方案6】:

            使用这个:

            if(typeof(String.prototype.trim) === "undefined")
            {
                String.prototype.trim = function() 
                {
                    return String(this).replace(/^\s+|\s+$/g, '');
                };
            }
            

            trim 函数现在可以作为字符串上的一流函数使用。例如:

            " dog".trim() === "dog" //true
            

            编辑:接受 J-P 的建议,将正则表达式模式合并为一个。还根据 Christoph 的建议添加了全局修饰符。

            在重新创建它之前,采用了 Matthew Crumley 关于嗅探修剪功能的想法。这是在客户端使用的 JavaScript 版本更新并因此具有自己的本机修剪功能的情况下完成的。

            【讨论】:

            • 为了与 ECMA 规范兼容,trim() 必须将this 转换为字符串类型,即您必须将this.replace(...) 更改为String(this).replace(...)('' + this).replace(...);这允许将call()apply() 函数转换为非字符串值
            • @David:是的,在函数内; ECMA 规范允许在非字符串对象上调用 trim(),例如 String.prototype.trim.apply(42)MyObj.prototype.trim = String.prototype.trim; new MyObj().trim();
            • 请注意,/\s/ 不会删除 ES3 规范定义的所有空白字符。我最近写了关于浏览器处理/\s/ - thinkweb2.com/projects/prototype/whitespace-deviations 的方式以及如何解决它。
            • 奇怪的是,原来的双正则表达式版本 (replace(/^\s+/, '').replace(/\s+$/, '');) 在许多浏览器中实际上稍微快一些,因此您不应该出于性能考虑而选择单正则表达式版本。选择你觉得更易读的那个。
            【解决方案7】:

            Steven Levithan 曾经写过如何实现Faster JavaScript Trim。绝对值得一看。

            【讨论】:

              【解决方案8】:

              这是我使用的函数。

              function trim(s){ 
                return ( s || '' ).replace( /^\s+|\s+$/g, '' ); 
              }
              

              【讨论】:

                猜你喜欢
                • 2012-08-12
                • 2019-10-03
                • 1970-01-01
                • 2021-04-09
                • 2021-03-27
                • 1970-01-01
                • 1970-01-01
                • 2015-10-21
                相关资源
                最近更新 更多