javascript之更有效率的字符串替換
更新時間:2008年08月02日 01:42:06 作者:
今天研究了一下JS比較高級的正則表達式方法,發(fā)現(xiàn)一個我認為比原來的方法更有效率的字符串替換方法。
首先看看原來是怎么樣做的:
function toTXT(str){
str = str.replace(/\&/g, "& amp;");
str = str.replace(/\>/g, "& gt;");
str = str.replace(/\</g, "& lt;");
str = str.replace(/\"/g, "& quot;");
str = str.replace(/\'/g, "& #39;");
return str;
}
[/code
分析:上面的方法是用來替換過濾字符串的HTML代碼的,一直認為這樣做很沒效率,因為要把這個字符串進行5次全文匹配(不是數(shù)據(jù)庫中的全文檢索),有沒方法只使用一次全文匹配,就可以替換掉不同的字符串為不同的結(jié)果呢?
呵呵,終于找到了下面的這個方法:
[code]
function toTXT(str){
var RexStr = /\<|\>|\"|\'|\&/g
str = str.replace(RexStr,
function(MatchStr){
switch(MatchStr){
case "<":
return "& lt;";
break;
case ">":
return "& gt;";
break;
case "\"":
return "& quot;";
break;
case "'":
return "& #39;";
break;
case "&":
return "& amp;";
break;
default :
break;
}
}
)
return str;
}
看上去要比第一個方法要復(fù)雜一些,寫的代碼也要多一點點,不過呢,只用一次,就可以替換整個字符串里面的匹配字符為不同的結(jié)果,非常有效率的。而且代碼看上去也很直觀,修改方便。
更重要的是第一個方法假如要替換"&"一定要放在最前面,而后面的方面完全不用擔(dān)心這個問題。
JavaScript還有很多鮮為人知的用法,而且很多思想在別的語言里面都沒有。就算JAVA再怎么強大,他的正則表達式卻在JDK1.4里面才引入,落后了很多。不過我沒說JAVA就一定比JS差只類的話啊。
JS的應(yīng)用范圍絕對不止HTML,還有很多其他的方面都在使用他,比如WebFT(測試網(wǎng)站的工具),.NET等,并且在即將發(fā)布,傳說中“FLASH殺手”——WPF/E(Windows Presentation Foundation/Everywhere)出現(xiàn)后,JS的應(yīng)用范圍更加寬廣。
很多人都不屑于JS,認為他很低級,連基本的對象類型都沒有。NO,錯了,在.NET里面,也就是Jscript.Net中,微軟將JS的版本提升為8.0,基本上他已經(jīng)與C#沒有任何差別,所有程序語言該有的他都具備了。
說一個笑話,我寫.net和ASP就用的Jscript,但是VB和C#我也并不是屬于那種泛泛而談的類型,只是我覺得假如可以用一門語言從后寫到前,包括他的周邊項目,那將是一件非常愜意的事情。從此再也不會在多種語言中轉(zhuǎn)來轉(zhuǎn)去了。
來看看WPF/E(Windows Presentation Foundation/Everywhere)的威力:
2005年的PDC大會上,微軟介紹了一項名為WPF/E(Windows Presentation Foundation/Everywhere)的技術(shù),在自己的MIX'06會議上又展示了新的特色。WPF/E依賴XAML和JavaScript來制作網(wǎng)頁,它也帶有跨平臺工具,支持CLR、.NET、C#、VB.NET等的代碼,實質(zhì)上,它是一個與目前屬于Adobe的Flash很類似的工具。
微軟的程序員Mike Harsh曾經(jīng)說過:“沒錯,我們正將C#帶入Mac.”
雖然被大家認為是“Flash殺手”,不過微軟的目標(biāo)更遠大一點:讓用戶不僅在桌面系統(tǒng)上使用微軟的軟件和技術(shù),他們同樣要占領(lǐng)網(wǎng)絡(luò)和移動設(shè)備。
“實質(zhì)上,WPF/E根本不是一個照搬的作品,它為開發(fā)者、設(shè)計師、技術(shù)員提供了一個綜合性的開發(fā)設(shè)計平臺。”開發(fā)者Joe Stegman說,“它能良好地與微軟的其他產(chǎn)品結(jié)合,這一點是Flash平臺望塵莫及的?!盨tegman表示他們一直在很努力地進行WPF/E開發(fā)工作,已經(jīng)發(fā)行了好幾個內(nèi)部版本,用戶體驗版在不久之后也會放出。
雖然現(xiàn)在Flash風(fēng)光無限,有人可能認為微軟的WPF/E沒法超越Flash,不過想想多年以前網(wǎng)景的Netscape……
圖為在瀏覽器中演示的矢量圖形,可以隨意對圖形進行縮放、旋轉(zhuǎn)
復(fù)制代碼 代碼如下:
function toTXT(str){
str = str.replace(/\&/g, "& amp;");
str = str.replace(/\>/g, "& gt;");
str = str.replace(/\</g, "& lt;");
str = str.replace(/\"/g, "& quot;");
str = str.replace(/\'/g, "& #39;");
return str;
}
[/code
分析:上面的方法是用來替換過濾字符串的HTML代碼的,一直認為這樣做很沒效率,因為要把這個字符串進行5次全文匹配(不是數(shù)據(jù)庫中的全文檢索),有沒方法只使用一次全文匹配,就可以替換掉不同的字符串為不同的結(jié)果呢?
呵呵,終于找到了下面的這個方法:
[code]
function toTXT(str){
var RexStr = /\<|\>|\"|\'|\&/g
str = str.replace(RexStr,
function(MatchStr){
switch(MatchStr){
case "<":
return "& lt;";
break;
case ">":
return "& gt;";
break;
case "\"":
return "& quot;";
break;
case "'":
return "& #39;";
break;
case "&":
return "& amp;";
break;
default :
break;
}
}
)
return str;
}
看上去要比第一個方法要復(fù)雜一些,寫的代碼也要多一點點,不過呢,只用一次,就可以替換整個字符串里面的匹配字符為不同的結(jié)果,非常有效率的。而且代碼看上去也很直觀,修改方便。
更重要的是第一個方法假如要替換"&"一定要放在最前面,而后面的方面完全不用擔(dān)心這個問題。
JavaScript還有很多鮮為人知的用法,而且很多思想在別的語言里面都沒有。就算JAVA再怎么強大,他的正則表達式卻在JDK1.4里面才引入,落后了很多。不過我沒說JAVA就一定比JS差只類的話啊。
JS的應(yīng)用范圍絕對不止HTML,還有很多其他的方面都在使用他,比如WebFT(測試網(wǎng)站的工具),.NET等,并且在即將發(fā)布,傳說中“FLASH殺手”——WPF/E(Windows Presentation Foundation/Everywhere)出現(xiàn)后,JS的應(yīng)用范圍更加寬廣。
很多人都不屑于JS,認為他很低級,連基本的對象類型都沒有。NO,錯了,在.NET里面,也就是Jscript.Net中,微軟將JS的版本提升為8.0,基本上他已經(jīng)與C#沒有任何差別,所有程序語言該有的他都具備了。
說一個笑話,我寫.net和ASP就用的Jscript,但是VB和C#我也并不是屬于那種泛泛而談的類型,只是我覺得假如可以用一門語言從后寫到前,包括他的周邊項目,那將是一件非常愜意的事情。從此再也不會在多種語言中轉(zhuǎn)來轉(zhuǎn)去了。
來看看WPF/E(Windows Presentation Foundation/Everywhere)的威力:
2005年的PDC大會上,微軟介紹了一項名為WPF/E(Windows Presentation Foundation/Everywhere)的技術(shù),在自己的MIX'06會議上又展示了新的特色。WPF/E依賴XAML和JavaScript來制作網(wǎng)頁,它也帶有跨平臺工具,支持CLR、.NET、C#、VB.NET等的代碼,實質(zhì)上,它是一個與目前屬于Adobe的Flash很類似的工具。
微軟的程序員Mike Harsh曾經(jīng)說過:“沒錯,我們正將C#帶入Mac.”
雖然被大家認為是“Flash殺手”,不過微軟的目標(biāo)更遠大一點:讓用戶不僅在桌面系統(tǒng)上使用微軟的軟件和技術(shù),他們同樣要占領(lǐng)網(wǎng)絡(luò)和移動設(shè)備。
“實質(zhì)上,WPF/E根本不是一個照搬的作品,它為開發(fā)者、設(shè)計師、技術(shù)員提供了一個綜合性的開發(fā)設(shè)計平臺。”開發(fā)者Joe Stegman說,“它能良好地與微軟的其他產(chǎn)品結(jié)合,這一點是Flash平臺望塵莫及的?!盨tegman表示他們一直在很努力地進行WPF/E開發(fā)工作,已經(jīng)發(fā)行了好幾個內(nèi)部版本,用戶體驗版在不久之后也會放出。
雖然現(xiàn)在Flash風(fēng)光無限,有人可能認為微軟的WPF/E沒法超越Flash,不過想想多年以前網(wǎng)景的Netscape……
圖為在瀏覽器中演示的矢量圖形,可以隨意對圖形進行縮放、旋轉(zhuǎn)
您可能感興趣的文章:
- JS替換字符串中空格方法
- JS替換字符串中字符即替換全部而不是第一個
- JS使用replace()方法和正則表達式進行字符串的搜索與替換實例
- js replace(a,b)之替換字符串中所有指定字符的方法
- JavaScript字符串插入、刪除、替換函數(shù)使用示例
- js replace替換所有匹配的字符串
- Json對象替換字符串占位符實現(xiàn)代碼
- js替換字符串的所有示例代碼
- javascript字符串替換函數(shù)如何一次性全部替換掉
- JavaScript字符串對象replace方法實例(用于字符串替換或正則替換)
- js 截取或者替換字符串中的數(shù)字實現(xiàn)方法
- JavaScript實現(xiàn)替換字符串中最后一個字符的方法
相關(guān)文章
LayUi使用switch開關(guān),動態(tài)的去控制它是否被啟用的方法
今天小編就為大家分享一篇LayUi使用switch開關(guān),動態(tài)的去控制它是否被啟用的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09微信小程序?qū)崿F(xiàn)canvas分享朋友圈海報
這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)canvas分享朋友圈海報,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-06-06layui 數(shù)據(jù)表格復(fù)選框?qū)崿F(xiàn)單選功能的例子
今天小編就為大家分享一篇layui 數(shù)據(jù)表格復(fù)選框?qū)崿F(xiàn)單選功能的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09JS表單驗證插件之?dāng)?shù)據(jù)與邏輯分離操作實例分析【策略模式】
這篇文章主要介紹了JS表單驗證插件之?dāng)?shù)據(jù)與邏輯分離操作,結(jié)合實例形式分析了JavaScript基于策略模式實現(xiàn)數(shù)據(jù)與邏輯分離的表單驗證插件相關(guān)原理、操作技巧及注意事項,需要的朋友可以參考下2020-05-05JavaScript?ECMAScript?6(ES2015~ES2022)所有新特性總結(jié)
這篇文章主要介紹了JavaScript?ECMAScript?6(ES2015~ES2022)所有新特性總結(jié),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-07-07js動態(tài)添加表格逐行添加、刪除、遍歷取值的實例代碼
最近做項目遇到這樣的需求,要求表格添加一行,表格刪除一行,表格遍歷取值等。下面小編給大家?guī)砹薺s動態(tài)添加表格逐行添加、刪除、遍歷取值的實例代碼,需要的朋友參考下2018-01-01