我正在尝试找到一种方法来从标题字符串的开头和结尾修剪空格。我正在使用它,但是似乎没有用:
title = title.replace(/(^[\s]+|[\s]+$)/g, '');
有任何想法吗?
注意:从2015年开始,所有主流浏览器(包括IE> = 9)都支持String.prototype.trim()。这意味着对于大多数用例来说,简单地做str.trim()
是实现问题所要求的最好方法。
Steven Levithantrim
从性能方面分析了Javascript中的许多不同实现。
他的建议是:
function trim1 (str) {
return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}
用于“快速跨浏览器的通用实现”,以及
function trim11 (str) {
str = str.replace(/^\s+/, '');
for (var i = str.length - 1; i >= 0; i--) {
if (/\S/.test(str.charAt(i))) {
str = str.substring(0, i + 1);
break;
}
}
return str;
}
“如果您想在所有浏览器中以极快的速度处理长字符串,”。
参考文献
如果使用jQuery是一种选择:
/**
* Trim the site input[type=text] fields globally by removing any whitespace from the
* beginning and end of a string on input .blur()
*/
$('input[type=text]').blur(function(){
$(this).val($.trim($(this).val()));
});
或者简单地:
$.trim(string);
如@ChaosPandion所述,该String.prototype.trim
方法已被引入ECMAScript 5th Edition规范,某些实现已包含此方法,因此最好的方法是检测本机实现并仅在不可用时声明它:
if (typeof String.prototype.trim != 'function') { // detect native implementation
String.prototype.trim = function () {
return this.replace(/^\s+/, '').replace(/\s+$/, '');
};
}
然后,您可以简单地:
title = title.trim();
我知道这是一篇旧文章,但以为我会分享我们的解决方案。在寻求最短的代码(不是每个人都喜欢简洁的正则表达式)时,可以使用:
title = title.replace(/(^\s+|\s+$)/g, '');
顺便说一句:我通过blog.stevenlevithan.com上共享的链接进行了相同的测试-更快的JavaScript修剪,该模式击败了所有其他HANDS!
使用IE8,将测试添加为test13。结果是:
原始长度:226002
trim1:110ms(长度:225994)
trim2:79ms(长度:225994)
trim3:172ms(长度:225994)
trim4:203ms(长度:225994)
trim5:172ms(长度:225994)
trim6:312ms(长度: 225994)
trim7:203ms(长度:225994)
trim8:47ms(长度:225994)
trim9:453ms(长度:225994)
trim10:15ms(长度:225994)
trim11:16ms(长度:225994)
trim12:31ms(长度:225994)
trim13:0ms(长度:226002)
ECMAScript 5支持trim
,并且已在Firefox中实现。
在这里,这应该可以满足您的所有需求
function doSomething(input) {
return input
.replace(/^\s\s*/, '') // Remove Preceding white space
.replace(/\s\s*$/, '') // Remove Trailing white space
.replace(/([\s]+)/g, '-'); // Replace remaining white space with dashes
}
alert(doSomething(" something with some whitespace "));
这是我过去用来修剪js中的字符串的一些方法:
String.prototype.ltrim = function( chars ) {
chars = chars || "\\s*";
return this.replace( new RegExp("^[" + chars + "]+", "g"), "" );
}
String.prototype.rtrim = function( chars ) {
chars = chars || "\\s*";
return this.replace( new RegExp("[" + chars + "]+$", "g"), "" );
}
String.prototype.trim = function( chars ) {
return this.rtrim(chars).ltrim(chars);
}
这是我当前的代码,如果我注释了第三行,那么第二行可以工作,但是如果我保留它的原样,那么第二行就不能工作。
var page_title = $(this).val().replace(/[^a-zA-Z0-9\s]/g, '');
page_title = page_title.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
page_title = page_title.replace(/([\s]+)/g, '-');
只需使用string.trim()
方法。所有主要的浏览器都支持它。此处参考:http : //www.w3schools.com/jsref/jsref_trim_string.asp
jQuery.trim(“你好,你好吗?”);
:)
完全加载DOM后,可以将其添加到所有文本字段中。我从来没有遇到需要提交前导或尾随空格的情况,因此在全球范围内一直这样做对我很有用...
$(function() { $('input[type=text]').on('blur', function(){
$(this).val($.trim($(this).val()));
});
});
这就是JavaScript架构师/ Guru Douglas Crockford的建议。
String.method('trim', function ( ) {
return this.replace(/^\s+|\s+$/g, '');
});
注意:您必须为Function.prototype定义“方法”。
或者
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g, '');
};
title.trim(); // returns trimmed title
观察
在最近的浏览器中,默认情况下包括trim方法。因此,您不必显式添加它。
主要浏览器Chrome,Firefox,Safari等支持修剪方法。已在Chrome 55.0.2883.95(64位),Firefox 51.0.1(64位),Safari 10.0(12602.1.50.0.10)中检查。
var word = " testWord "; //add here word or space and test
var x = $.trim(word);
if(x.length > 0)
alert('word');
else
alert('spaces');
为此的递归尝试
function t(k){
if (k[0]==' ') {
return t(k.substr(1,k.length));
} else if (k[k.length-1]==' ') {
return t(k.substr(0,k.length-1));
} else {
return k;
}
}
像这样打电话:
t(" mehmet "); //=>"mehmet"
如果要过滤特殊字符,则可以基本上定义一个列表字符串:
function t(k){
var l="\r\n\t "; //you can add more chars here.
if (l.indexOf(k[0])>-1) {
return t(k.substr(1,k.length));
} else if (l.indexOf(k[k.length-1])>-1) {
return t(k.substr(0,k.length-1));
} else {
return k;
}
}
文章标签:javascript , regex
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!