裁剪字符串trim()自定義改進(jìn)版
ECMAScript5已經(jīng)為字符串定義了原生的trim方法。這個(gè)方法可能比會(huì)比本文的任何版本的都要快。建議在支持的瀏覽器中使用原生函數(shù)。下面講述的是自定義trim()函數(shù)遇到的問題,改進(jìn)的過程。功夫在不斷淬煉中才能醇正。
JavaScript中沒有用于移除字符串頭尾空白的原生修剪方法。最常見的自定義trim()函數(shù)實(shí)現(xiàn)如下所示:
function trim(text) {
return text.replace(/^\s+|\s+$/g, ‘');
}
這種實(shí)現(xiàn)使用一個(gè)正則表達(dá)式匹配字符串開頭和結(jié)尾的一或多個(gè)空白字符。replace()方法用空字符串替換所有匹配的部分。
然而這個(gè)實(shí)現(xiàn)方式有個(gè)基于正則表達(dá)式的性能問題,這種影響來自兩個(gè)方面:一方面是指明有兩個(gè)匹配模式的管道運(yùn)算符,另一方面是指明全局應(yīng)用該模式的g標(biāo)記。
考慮到這些,可以將正則表達(dá)式一分為二并去掉g標(biāo)記來重寫該函數(shù),稍稍提高它的速度。
function trim(text) {
return text.replace(/^\s+/, ‘').replace(/\s+$/, ‘');
}
另一個(gè)改進(jìn)的版本。保證正則表達(dá)式盡可能地簡單。
function trim(text) {
//刪除字符串的頭部空白
text = text.replace(/^\s+/, ‘');
// 循環(huán)清除尾部空白
for(var i=text.length; i--; ) {
if(/\S/.test(text.charAt(i))) { // \S 非空白字符
text = text.substring(0, i+1);
break;
}
}
return text;
}
使用建議:第2個(gè)trim()函數(shù)在小規(guī)模處理短字符串時(shí)性能還是好的。而第3個(gè)trim函數(shù)在處理長字符串時(shí)明顯更快。
題外話:簡單的裁剪字符串首尾空白字符函數(shù),引發(fā)了對(duì)正則表達(dá)式的性能問題的考慮并實(shí)現(xiàn)規(guī)避性能問題的方法。技術(shù)追求完美,只能在實(shí)踐中前行。
相關(guān)文章
javaScript獲取對(duì)象中非空的屬性實(shí)現(xiàn)方法詳解
這篇文章主要為大家介紹了javaScript獲取對(duì)象中非空的屬性實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07javascript的日期對(duì)象、數(shù)組對(duì)象、二維數(shù)組使用說明
這篇文章主要介紹了javascript的日期對(duì)象、數(shù)組對(duì)象、二維數(shù)組使用說明,需要的朋友可以參考下2014-12-12JavaScript入門教程(5) js Screen屏幕對(duì)象
這是基本JavaScript的屏幕對(duì)象2009-01-01