在JavaScript中修剪string?

如何修剪JavaScript中的string?

由于新的浏览器(IE9 +)已经实现了trim() ,所以只有在Prototype-Object上不存在的情况下,才应该实现trim() (重写它是一个巨大的性能命中)。 通常在扩展本地对象时build议使用这种方法 请注意,添加的属性是可枚举的,除非你使用ES5 Object.defineProperty

对于那些不支持trim()浏览器,可以使用MDN中的这个polyfill:

 if (!String.prototype.trim) { (function() { // Make sure we trim BOM and NBSP var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; String.prototype.trim = function() { return this.replace(rtrim, ''); }; })(); } 

看到这个:

 String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g, '');}; String.prototype.ltrim=function(){return this.replace(/^\s+/,'');}; String.prototype.rtrim=function(){return this.replace(/\s+$/,'');}; String.prototype.fulltrim=function(){return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,'').replace(/\s+/g,' ');}; 

如果你已经使用了这个框架,那么jQuery的trim是很方便的。

 $.trim(' your string '); 

我倾向于经常使用jQuery,因此修剪string对我来说很自然。 但有可能在那里反对jQuery? 🙂

虽然上面有很多正确的答案,但应该注意,JavaScript中的String对象具有ECMAScript 5以外的原生.trim()方法。 因此,理想情况下,任何试图对trim方法进行原型化的尝试都应该检查是否已经存在。

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

本地添加: JavaScript 1.8.1 / ECMAScript 5

因此支持

Firefox: 3.5+

Safari: 5+

Internet Explorer: IE9 + (仅限标准模式!) http://blogs.msdn.com/b/ie/archive/2010/06/25/enhanced-scripting-in-ie9-ecmascript-5-support-and-more的;.aspx

Chrome: 5+

Opera: 10.5+

ECMAScript 5支持表: http : //kangax.github.com/es5-compat-table/

有很多可以使用的实现 。 最明显的是这样的:

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

这里的简单版本什么是JavaScript修剪的一般function?

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

我知道这个问题已经被提出三年了。现在, String.trim()是本地在JavaScript中添加的。例如,您可以直接修剪如下,

 document.getElementById("id").value.trim(); 

Flagrant Badassery拥有11种不同的基准信息:

http://blog.stevenlevithan.com/archives/faster-trim-javascript

基于正则expression式的非常奇怪的是比传统的循环慢。


这是我的个人。 这个代码是旧的! 我为JavaScript1.1和Netscape 3写了它,并且从那以后只是稍微更新了。 (原来使用的String.charAt)

 /** * Trim string. Actually trims all control characters. * Ignores fancy Unicode spaces. Forces to string. */ function trim(str) { str = str.toString(); var begin = 0; var end = str.length - 1; while (begin <= end && str.charCodeAt(begin) < 33) { ++begin; } while (end > begin && str.charCodeAt(end) < 33) { --end; } return str.substr(begin, end - begin + 1); } 

如果您使用jQuery,请使用jQuery.trim()函数。 例如, if( jQuery.trim(StringVariable) == '')

使用原生JavaScript方法: String.trimLeft()String.trimRight()String.trim()

IE9 +和所有其他主stream浏览器都支持String.trim()

 ' Hello '.trim() //-> 'Hello' 

String.trimLeft()String.trimRight()是非标准的,但在除IE之外的所有主stream浏览器中都受支持

 ' Hello '.trimLeft() //-> 'Hello ' ' Hello '.trimRight() //-> ' Hello' 

IE支持很容易使用polyfill:

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

现在,您可以使用本地Javascript实现的string.trim()

 var orig = " foo "; console.log(orig.trim());//foo 

也可以看看

  • trimLeft()
  • trimRight()
 String.prototype.trim = String.prototype.trim || function () { return this.replace(/^\s+|\s+$/g, ""); }; String.prototype.trimLeft = String.prototype.trimLeft || function () { return this.replace(/^\s+/, ""); }; String.prototype.trimRight = String.prototype.trimRight || function () { return this.replace(/\s+$/, ""); }; String.prototype.trimFull = String.prototype.trimFull || function () { return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g, "").replace(/\s+/g, " "); }; 

Matt Matt Duereg无耻地被偷走了。

从angular度js项目修剪代码

 var trim = (function() { // if a reference is a `String`. function isString(value){ return typeof value == 'string'; } // native trim is way faster: http://jsperf.com/angular-trim-test // but IE doesn't have it... :-( // TODO: we should move this into IE/ES5 polyfill if (!String.prototype.trim) { return function(value) { return isString(value) ? value.replace(/^\s*/, '').replace(/\s*$/, '') : value; }; } return function(value) { return isString(value) ? value.trim() : value; }; })(); 

并称之为trim(" hello ")

这是一个非常简单的方法:

 function removeSpaces(string){ return string.split(' ').join(''); } 

你可以声明你的variables为string,并使用其修剪function:

 var str = new String('my string'); str= str.trim(); 

使用简单的代码

 var str = " Hello World! "; alert(str.trim()); 

浏览器支持

 Feature Chrome Firefox Internet Explorer Opera Safari Edge Basic support (Yes) 3.5 9 10.5 5 ? 

为旧的浏览器添加原型

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

今天,几乎每个浏览器都支持String.prototype.trim()

你这样使用它:

 var origStr = ' foo '; var newStr = origStr.trim(); // Value of newStr becomes 'foo' 

如果您仍然需要支持不支持此function的古代浏览器,则这是由MDNbuild议的一种填充

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

我有一个使用修剪的lib。 所以通过使用下面的代码解决了它。

 String.prototype.trim = String.prototype.trim || function(){ return jQuery.trim(this); }; 
 if(!String.prototype.trim){ String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/gm,''); }; } 

从以前的答案,它不同于添加标志m

标志m将search几个线性文本。 在这种模式下,在换行符( \n )之前和之后插入标记模式( ^ $ )的开头和结尾。

不知道这里可以隐藏什么bug,但是我用这个:

 var some_string_with_extra_spaces=" goes here " console.log(some_string_with_extra_spaces.match(/\S.*\S|\S/)[0]) 

或者,如果文本包含进入:

 console.log(some_string_with_extra_spaces.match(/\S[\s\S]*\S|\S/)[0]) 

另一个尝试:

 console.log(some_string_with_extra_spaces.match(/^\s*(.*?)\s*$/)[1]) 

这里是在TypeScript中:

 var trim: (input: string) => string = String.prototype.trim ? ((input: string) : string => { return (input || "").trim(); }) : ((input: string) : string => { return (input || "").replace(/^\s+|\s+$/g,""); }) 

如果原生原型不可用,它将回退到正则expression式。

我已经写了这个函数来修剪,当2008年的.trim()函数不可用时,一些旧的浏览器仍然不支持.trim()函数,我希望这个函数可以帮助别人。

修剪function

 function trim(str) { var startpatt = /^\s/; var endpatt = /\s$/; while(str.search(startpatt) == 0) str = str.substring(1, str.length); while(str.search(endpatt) == str.length-1) str = str.substring(0, str.length-1); return str; } 

说明 :函数trim()接受一个string对象,并删除任何开始和结尾的空格(空格,制表符和换行符),并返回修剪后的string。 您可以使用此function修剪表单input以确保发送有效的数据。

作为一个例子,可以通过以下方式调用该函数。

 form.elements[i].value = trim(form.elements[i].value); 

你可以使用普通的JavaScript来做到这一点:

 function trimString(str, maxLen) { if (str.length <= maxLen) { return str; } var trimmed = str.substr(0, maxLen); return trimmed.substr(0, trimmed.lastIndexOf(' ')) + '…'; } // Let's test it sentenceOne = "too short"; sentencetwo = "more than the max length"; console.log(trimString(sentenceOne, 15)); console.log(trimString(sentencetwo, 15)); 

以下是一些使用JavaScript修剪string的示例。

我使用一个正则expression式来查找需要修剪的情况,并使用该正则expression式的结果来确定所需的子string边界:

 var illmatch= /^(\s*)(?:.*?)(\s*)$/ function strip(me){ var match= illmatch.exec(me) if(match && (match[1].length || match[2].length)){ me= me.substring(match[1].length, p.length-match[2].length) } return me } 

进入这个devise的一个决定是使用一个子string来执行最终的捕获。 s / \?://(使中期捕获)和replace片段变成:

  if(match && (match[1].length || match[3].length)){ me= match[2] } 

我在这些印象中有两个performance投注:

  1. 子string实现是否复制原始string的数据? 如果是这样的话,首先,当需要修剪一个string时,首先在正则expression式(可能希望是部分)中进行双遍历,然后在子string提取中进行第二次遍历。 希望一个子string实现只引用原始string,所以像substring这样的操作可以几乎是免费的。 交叉手指

  2. 在正则expression式中捕获有多好? 中期,产值可能会很长。 我还没有准备好存储所有的正则expression式impls'捕获不会妨碍几百KB的input捕获,但我也没有testing(太多的运行时间,对不起!)。 第二总是运行捕获; 如果你的引擎可以做到这一点,而不会受到打击,也许使用上面的一些串口技术,肯定会使用它!

对于IE9 +和其他浏览器

 function trim(text) { return (text == null) ? '' : ''.trim.call(text); }