JavaScript的String strip()?

raw*_*rrr 175 javascript trim strip

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

例如:

" dog"

"dog "

" dog "

" dog "

一切都变成了

"dog"

Dav*_*res 199

用这个:

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

trim函数现在可用作字符串的第一类函数.例如:

" dog".trim() === "dog" //true
Run Code Online (Sandbox Code Playgroud)

编辑:采取JP的建议,将正则表达式模式合二为一.根据Christoph的建议,还添加了全局修饰符.

马修·克拉姆利(Matthew Crumley)想要在重新创造之前嗅探修剪功能.这是在客户端上使用的JavaScript版本更新的情况下完成的,因此具有自己的本机修剪功能.

  • 有关一些性能数据,请参阅http://blog.stevenlevithan.com/archives/faster-trim-javascript (3认同)
  • 请注意,`/\s /`不会删除ES3规范定义的所有空格字符.我最近写过关于浏览器处理`/\s /`的方式 - http://thinkweb2.com/projects/prototype/whitespace-deviations/ - 以及如何解决它. (3认同)
  • 奇怪的是,原来的两个正则表达式版本(`replace(/ ^\s + /,'').renplace(/\s + $ /,'');`)实际上在许多浏览器中略快,所以你不应该选择出于性能问题的一个正则表达式版本.选择你认为更具可读性的那些. (3认同)
  • 为了与ECMA规范兼容,`trim()`必须将`this`转换为类型字符串,即你必须将`this.replace(...)`改为`String(this).replace(. ..)`或`(''+ this).replace(...)`; 这允许`call()`或`apply()`函数到非字符串值 (2认同)

小智 147

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


jpa*_*kal 97

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

 "  foo\n\t  ".trim() => "foo"
Run Code Online (Sandbox Code Playgroud)

也可以看看:

  • 可以说这应该是最佳答案。 (3认同)

Mic*_*Mic 12

这是我使用的功能.

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


Bar*_*row 12

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

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

请记住,修改内置原型会带来性能损失(由于JS引擎因许多运行时优化而失败),而在性能危急情况下,您可能需要考虑替代定义myTrimFunction(string).话虽这么说,如果您的目标是没有原生.trim()支持的旧环境,您可能会遇到更重要的性能问题.


Gum*_*mbo 8

Steven Levithan曾写过关于如何实现更快的JavaScript修剪的文章.这绝对值得一看.


Fil*_*vić 7

如果你已经在使用jQuery,那么你可能想看看jQuery.trim()jQuery已经提供了哪些.


Eri*_*ric 6

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

  • 我到这儿来的原因! (4认同)