最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript筆記 String類replace函數(shù)的一些事

 更新時(shí)間:2011年09月22日 23:52:44   作者:  
加固javascript基礎(chǔ)知識(shí)目的是為以后研究jQuery源碼做好鋪墊。
我最近查閱javascript資料,發(fā)現(xiàn)了一個(gè)函數(shù):
復(fù)制代碼 代碼如下:

function format(s)
{
var args = arguments;
var pattern = new RegExp("%([1-" + arguments.length + "])","g");
return String(s).replace(pattern,function(word,index){
return args[index];
});
}
// test
window.onload = alert(format("And the %1 want to know whose %2 you %3", "papers", "shirt", "wear"));
//And the papers want to know whose shirt you wear

這種功能的函數(shù),在shell或java都似曾見(jiàn)過(guò),但是在javascript函數(shù)實(shí)現(xiàn)的方法很新穎。新穎的地方就是在:
復(fù)制代碼 代碼如下:

return String(s).replace(pattern,function(word,index){
return args[index];
});

但是這里String類的replace的用法和我平時(shí)用的很不一樣,我以前寫(xiě)過(guò)一個(gè)這樣的replace的函數(shù):
復(fù)制代碼 代碼如下:

function myReplace(s)
{
return String(s).replace(/CJ[0-9]{2}/g,function(word){
return word = 'CJJK00';
});
}
//window.onload = alert(myReplace('CJ9080,CJ8976,CJ12919,CJ8765'));//CJJK0080,CJJK0076,CJJK00919,CJJK0065

我在使用replace時(shí)候,如果第二個(gè)參數(shù)是function我一般都只用到第一個(gè)參數(shù),基本沒(méi)有思考它的第二個(gè),第三個(gè)或者更多的參數(shù),現(xiàn)在看到有人使用了第二個(gè)參數(shù),就很想探求下replace第二個(gè)參數(shù)使用到了function時(shí)候,里面參數(shù)到底有多少個(gè),每個(gè)的含義到底如何?
下面是我改寫(xiě)了我自己寫(xiě)的替換函數(shù):
復(fù)制代碼 代碼如下:

function myReplaceFtn(s)
{
return String(s).replace(/CJ[0-9]{2}/g,function(word,index){
return word = 'CJJK00@' + index + "@";
});
}
//window.onload = alert(myReplaceFtn('CJ9080,CJ8976,CJ12919,CJ8765'));//CJJK00@0@80,CJJK00@7@76,CJJK00@14@919,CJJK00@22@65

本來(lái)我以為,函數(shù)format里的function(word,index),我認(rèn)為應(yīng)該是正則表達(dá)式所匹配字符串的索引(%1的索引為1,%2的索引為2,%3的索引為3),而我寫(xiě)的函數(shù)里面第二個(gè)參數(shù)index不是被匹配到字符串的索引,而是被匹配到的字符在原字符串的位置。下面我做了這樣的測(cè)試:
復(fù)制代碼 代碼如下:

function format(s)
{
var args = arguments;
var pattern = new RegExp("%([1-" + arguments.length + "])","g");
return String(s).replace(pattern,function(word,index){
alert("arguments.length:" + arguments.length);//4
return args[index];
});
}
function myReplaceFtn(s)
{
return String(s).replace(/CJ[0-9]{2}/g,function(word,index){
alert("arguments.length:" + arguments.length);//3
return word = 'CJJK00@' + index + "@";
});
}

函數(shù)format里面function(word,index)的參數(shù)有4個(gè),而函數(shù)myReplaceFtn(s)里面function(word,index)的參數(shù)有3個(gè)。為什么會(huì)有這樣的不同?我做了如下測(cè)試:
復(fù)制代碼 代碼如下:

//以下程序在firefox里面運(yùn)行
function newformat(s)
{
var args = arguments;
var pattern = new RegExp("%([1-" + arguments.length + "])","g");
return String(s).replace(pattern,function(word,index){
console.log("arguments.length:" + arguments.length);
for (var i = 0,j = arguments.length;i<j;i++)
{
console.log("標(biāo)示newformat" + i + ":" + arguments[i]);
}
return args[index];
});
}
function newmyReplace(s)
{
return String(s).replace(/CJ[0-9]{2}/g,function(word){
console.log("arguments.length:" + arguments.length);
for (var i = 0,j = arguments.length;i<j;i++)
{
console.log("標(biāo)示newmyReplace" + i + ":" + arguments[i]);
}
return word = 'CJJK00';
});
}

結(jié)果:
arguments.length:4
標(biāo)示newformat0:%1
標(biāo)示newformat1:1
標(biāo)示newformat2:8
標(biāo)示newformat3:And the %1 want to know whose %2 you %3
arguments.length:4
標(biāo)示newformat0:%2
標(biāo)示newformat1:2
標(biāo)示newformat2:30
標(biāo)示newformat3:And the %1 want to know whose %2 you %3
arguments.length:4
標(biāo)示newformat0:%3
標(biāo)示newformat1:3
標(biāo)示newformat2:37
標(biāo)示newformat3:And the %1 want to know whose %2 you %3
arguments.length:3
標(biāo)示newmyReplace0:CJ90
標(biāo)示newmyReplace1:0
標(biāo)示newmyReplace2:CJ9080,CJ8976,CJ12919,CJ8765
arguments.length:3
標(biāo)示newmyReplace0:CJ89
標(biāo)示newmyReplace1:7
標(biāo)示newmyReplace2:CJ9080,CJ8976,CJ12919,CJ8765
arguments.length:3
標(biāo)示newmyReplace0:CJ12
標(biāo)示newmyReplace1:14
標(biāo)示newmyReplace2:CJ9080,CJ8976,CJ12919,CJ8765
arguments.length:3
標(biāo)示newmyReplace0:CJ87
標(biāo)示newmyReplace1:22
標(biāo)示newmyReplace2:CJ9080,CJ8976,CJ12919,CJ8765
對(duì)于回調(diào)函數(shù)里的arguments值現(xiàn)在比較清晰了,arguments個(gè)數(shù)的不同應(yīng)該和我們寫(xiě)的正則表達(dá)式有關(guān)系,不管怎樣,第一個(gè)參數(shù)是匹配到的字符串,最后一個(gè)是原字符串,倒數(shù)第二個(gè)參數(shù)是匹配到的字符串的在原字符串索引的起始位,像format里的第二個(gè)參數(shù)index根據(jù)情況而定了,我自己寫(xiě)的newmyReplace里沒(méi)有這個(gè)參數(shù),format的index參數(shù)是%[1-4],里面的1-4,不過(guò)還是寫(xiě)個(gè)方法確定下:
復(fù)制代碼 代碼如下:

function charFormat(s)
{
var pattern = new RegExp("%([a-d])","g");
return String(s).replace(pattern,function(word,index){
switch(index)
{
case 'a':
return 'thisisA';
case 'b':
return 'thisisB';
case 'c':
return 'thisisC';
case 'd':
return 'thisisD';
default:
return 'thisisNULL';
}
});
}
window.onload = console.log(charFormat("And the %a want to know whose %d you %b", "papers", "shirt", "wear"));
//And the thisisA want to know whose thisisD you thisisB

由此可見(jiàn)String的replace是相當(dāng)?shù)膹?qiáng)大,不過(guò)本人正則表達(dá)式功力還不夠,不知道還有什么別的特別的正則表達(dá)式會(huì)產(chǎn)生什么不同的結(jié)果。另外不知道誰(shuí)有javascript里面String類replace原始寫(xiě)法,希望能貢獻(xiàn)出來(lái),我想好好研究下。

相關(guān)文章

  • JavaScript prototype對(duì)象的屬性說(shuō)明

    JavaScript prototype對(duì)象的屬性說(shuō)明

    JavaScript中對(duì)象的prototype屬性,是用來(lái)返回對(duì)象類型原型的引用的。我們使用prototype屬性提供對(duì)象的類的一組基本功能。并且對(duì)象的新實(shí)例會(huì)”繼承”賦予該對(duì)象原型的操作。但是這個(gè)prototype到底是怎么實(shí)現(xiàn)和被管理的呢?
    2010-03-03
  • javascript使用activex控件的代碼

    javascript使用activex控件的代碼

    最近公司項(xiàng)目用到了avtivex控件。以前從來(lái)沒(méi)有用過(guò)。我把最近到處找到的使用方法整理一下。
    2011-01-01
  • js本身的局限性 別讓javascript做太多事

    js本身的局限性 別讓javascript做太多事

    最近常有人在Q群里發(fā)問(wèn)諸如"怎樣讓js操作文件"、"怎樣讓js實(shí)現(xiàn)多線程"等問(wèn)題。
    2010-03-03
  • JS跳出循環(huán)的5種方法總結(jié)(return、break、continue、throw等)

    JS跳出循環(huán)的5種方法總結(jié)(return、break、continue、throw等)

    想必大家都遇到過(guò)循環(huán)遍歷時(shí)遇到滿足條件的時(shí)候就跳出循環(huán)這樣的需求,于是整理了一篇各種循環(huán)是如何結(jié)束的,這篇文章主要給大家介紹了關(guān)于JS跳出循環(huán)的5種方法,分別是return、break、continue、throw等的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • Layui動(dòng)態(tài)生成select下拉選擇框不顯示的解決方法

    Layui動(dòng)態(tài)生成select下拉選擇框不顯示的解決方法

    今天小編就為大家分享一篇Layui動(dòng)態(tài)生成select下拉選擇框不顯示的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • NestJs使用Mongoose對(duì)MongoDB操作的方法

    NestJs使用Mongoose對(duì)MongoDB操作的方法

    這篇文章主要介紹了NestJs使用Mongoose對(duì)MongoDB操作的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • javascript模擬命名空間

    javascript模擬命名空間

    JavaScript 沒(méi)有任何特定語(yǔ)言功能來(lái)支持命名空間,但很容易使用對(duì)象來(lái)模擬命名空間。今天我們就來(lái)探討下這個(gè)問(wèn)題,希望大家能夠喜歡。
    2015-04-04
  • BootStrap Datepicker 插件修改為默認(rèn)中文的實(shí)現(xiàn)方法

    BootStrap Datepicker 插件修改為默認(rèn)中文的實(shí)現(xiàn)方法

    bootstrap-datepicker 是一個(gè)非常優(yōu)秀的時(shí)間選擇插件,默認(rèn)是英文顯示日期的,通過(guò)下面幾個(gè)小修改讓其支持默認(rèn)中文。下面通過(guò)本文給大家介紹BootStrap Datepicker 插件修改為默認(rèn)中文的實(shí)現(xiàn)方法,一起看看吧
    2017-02-02
  • 不想讓瀏覽器運(yùn)行javascript腳本的方法

    不想讓瀏覽器運(yùn)行javascript腳本的方法

    本篇文章給大家介紹不想讓瀏覽器運(yùn)行javascript腳本的方法,操作方法很簡(jiǎn)單,只需按照以下幾步就可以完成,需要的朋友參考下
    2015-11-11
  • js實(shí)現(xiàn)圖片查看器

    js實(shí)現(xiàn)圖片查看器

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)圖片查看器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評(píng)論

兰州市| 马龙县| 荥经县| 临猗县| 长治市| 同德县| 中江县| 婺源县| 龙游县| 城步| 富平县| 茶陵县| 延庆县| 高州市| 黔东| 株洲县| 昌吉市| 石首市| 贵南县| 西青区| 平阴县| 山丹县| 洪泽县| 竹山县| 长岛县| 沅江市| 洛南县| 晋江市| 台江县| 阿坝县| 綦江县| 昆明市| 江陵县| 泗阳县| 山东| 河间市| 浦北县| 清流县| 陵水| 惠东县| 陇南市|