欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文詳解JavaScript中的replace()函數(shù)

 更新時(shí)間:2023年01月09日 09:03:17   作者:南梔~zmt  
replace方法的語(yǔ)法是stringObj.replace(rgExp, replaceText),其中stringObj是字符串(string),下面這篇文章主要給大家介紹了關(guān)于JavaScript中replace()函數(shù)的相關(guān)資料,需要的朋友可以參考下

1. 方法簡(jiǎn)介

該方法的簽名是:replace([RegExp|String],[String|Function])。

該方法 返回一個(gè)新的字符串,但并不改變字符串本身。

該方法接收2個(gè)參數(shù),

第一個(gè)參數(shù)可以是字符串,也可以是一個(gè)正則表達(dá)式;

第二個(gè)參數(shù)可以是一個(gè)字符串,也可以是一個(gè)函數(shù)。

2. replace()使用

2.1 replace(字符串,字符串)

假如我們有一個(gè)字符串中出現(xiàn)了錯(cuò)別字”背景“,需要用”北京“來(lái)替換,那么我們可以如下搞定:

let str = '我愛(ài)背景天安門(mén)';
str = str.replace('背景','北京');
console.log(str);   // 輸出結(jié)果:我愛(ài)北京天安門(mén)

但這個(gè)用法有一個(gè)問(wèn)題:

let str = '我愛(ài)背景天安門(mén),但是背景霧霾太嚴(yán)重';
str = str.replace('背景','北京');
// 輸出結(jié)果:我愛(ài)北京天安門(mén),但是背景霧霾太嚴(yán)重
console.log(str);

我們發(fā)現(xiàn),如果字符串str中有多個(gè)待替換的子串,比如本例中的“背景”,出現(xiàn)了2次,那么replace()方法只能給我們用目標(biāo)字符串(北京)替換掉第1次出現(xiàn)的"背景"。

如果想把所有的"背景"都給替換了,就必須調(diào)用多次。

此使用方法bug: 只能替換一次 多次替換需要多次調(diào)用

2.2 replace(正則表達(dá)式,字符串)

let str = '我愛(ài)背景天安門(mén),但是背景霧霾太嚴(yán)重';
str = str.replace(/背景/g,'北京');
// 輸出結(jié)果:我愛(ài)北京天安門(mén),但是北京霧霾太嚴(yán)重
console.log(str); 

這里需要說(shuō)明的是,str.replace(/背景/g,“北京”)的第一個(gè)參數(shù) ”/背景/g“ 是一個(gè)正則表達(dá)式,使用/ /的正則寫(xiě)法是JavaScript中正則表達(dá)式的字面量寫(xiě)法。
在此處,正則表達(dá)式的末尾有個(gè)g,它表示match源字符串str中所有匹配項(xiàng)。
這里如果沒(méi)有g(shù),那么也只能匹配到第一個(gè)錯(cuò)別字”背景“,只有加了這個(gè)g,才能匹配到所有的”背景“。

2.3 replace(正則表達(dá)式,function(){})

以上的用法還是比較直觀的,但是能實(shí)現(xiàn)的功能也比較簡(jiǎn)單,如果需要做一些復(fù)雜的字符串替換運(yùn)算,那么就需要使用較為高級(jí)(復(fù)雜)的用法,就是 正則+function 的用法。說(shuō)白了就是第一參數(shù)傳一個(gè)正則表達(dá)式,我們下面稱之為RegArg;第二個(gè)參數(shù)給一個(gè)函數(shù),我們下面稱之為FuncArg。這也是replace()的核心用法。

本質(zhì)對(duì)str使用RegArg做match()匹配,如果匹配到多項(xiàng)結(jié)果(比如使用了全局匹配g,或者分組),那么每一個(gè)匹配結(jié)果都將執(zhí)行一次FuncArg函數(shù),并且用該函數(shù)的返回值替代源字符串中的匹配項(xiàng)。

2.3.1 簡(jiǎn)單用法,正則表達(dá)式不使用分組

let str = '我愛(ài)背景天安門(mén),但是背景霧霾太嚴(yán)重';
str = str.replace(/背景/,function(){
    console.log(arguments);
    return '北京'
});

console.log(str);

解析:

  • 本例的目的是:把原字符串中的’背景’,替換為’北京’。
  • 正則表達(dá)式?jīng)]有使用全局匹配符g,所以只替換了源字符串中第一個(gè)‘背景’子串,F(xiàn)uncArg只執(zhí)行了一次。

replace()函數(shù)第一個(gè)參數(shù)是簡(jiǎn)單正則表達(dá)式,第二個(gè)參數(shù)是函數(shù)時(shí):

這個(gè)函數(shù)是有參數(shù)的,而且這些參數(shù)是默認(rèn)的。

  • arguments[0]是匹配到的子字符串
  • arguments[1]是匹配到的子串的索引位置
  • arguments[2]是源字符串本身

.本例如果想替換所有的‘背景’為‘北京’,只需要讓正則表達(dá)式后加個(gè)g。

let str = '我愛(ài)背景天安門(mén),但是背景霧霾太嚴(yán)重';
str = str.replace(/背景/g,function(){
    console.log(arguments);
    return '北京'
});

console.log(str);

我們可以看到,輸出了2個(gè)Arguments,因?yàn)槲覀兪褂萌制ヅ鋑后,會(huì)match到2個(gè)項(xiàng),所以就執(zhí)行了2次function。
第一個(gè)跟前邊一樣,第二個(gè)arugments的索引位置是10,因?yàn)樵醋址械诙€(gè)‘背景’的索引是10.

eg:把捐款是100元以下的金額數(shù)用‘**’來(lái)替換掉。

var txt ='劉菲:50元。張常成:150元。孫玉杰:200元。李明軒:20元。李子豪:1500元。';
txt = txt.replace(/\d+/g,function(){
    console.log(arguments);
    return arguments[0].length > 2 ? arguments[0] : '**';
});

console.log(txt);

2.3.2 復(fù)雜用法,正則表達(dá)式使用分組

eg:這個(gè)例子的意圖是:把所有以“萬(wàn)”為單位的捐款,其金額改為‘元’。比如 :4萬(wàn),改為40000元

var txt ='劉菲:5萬(wàn)。張常成:5000元。孫玉杰:2000元。李明軒:20萬(wàn)。李子豪:8500元。';
txt = txt.replace(/(\d+)(萬(wàn))/g,function(){
    console.log(arguments);
    return arguments[1] + '0000' + '元';
});

console.log(txt);

輸出結(jié)果是: 

replace()函數(shù)第一個(gè)參數(shù)是分組正則表達(dá)式,第二個(gè)參數(shù)是函數(shù)時(shí):

  • arguments[0]是匹配到的子字符串
  • arguments[1]是匹配到的第1個(gè)分組項(xiàng)
  • arguments[2]是匹配到的第2個(gè)分組項(xiàng)
  • arguments[3]是匹配到的字符串的索引位置
  • arguments[4]是源字符串本身

總結(jié)

到此這篇關(guān)于JavaScript中replace()函數(shù)的文章就介紹到這了,更多相關(guān)JS的replace()函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 原生JS封裝animate運(yùn)動(dòng)框架的實(shí)例

    原生JS封裝animate運(yùn)動(dòng)框架的實(shí)例

    下面小編就為大家?guī)?lái)一篇原生JS封裝animate運(yùn)動(dòng)框架的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • js刷新頁(yè)面location.reload()用法詳解

    js刷新頁(yè)面location.reload()用法詳解

    這篇文章主要介紹了js刷新頁(yè)面location.reload()用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 微信小程序?qū)崙?zhàn)之登錄頁(yè)面制作(5)

    微信小程序?qū)崙?zhàn)之登錄頁(yè)面制作(5)

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崙?zhàn)之登錄頁(yè)面制作代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 對(duì)JavaScript的eval()中使用函數(shù)的進(jìn)一步討論

    對(duì)JavaScript的eval()中使用函數(shù)的進(jìn)一步討論

    《JavaScript語(yǔ)言精髓與編程實(shí)踐》的讀者I22141提出了一問(wèn)題:為什么下面這段代碼在JScript 和SpiderMonkey中表現(xiàn)不一樣:
    2008-07-07
  • firefox瀏覽器下javascript 拖動(dòng)層效果與原理分析代碼

    firefox瀏覽器下javascript 拖動(dòng)層效果與原理分析代碼

    這篇文章主要給大家介紹了關(guān)于在firefox瀏覽器下如何利用javascript實(shí)現(xiàn)拖動(dòng)層效果,以及其中的原理分析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面來(lái)一起看看吧
    2007-12-12
  • js 動(dòng)態(tài)加載事件的幾種方法總結(jié)

    js 動(dòng)態(tài)加載事件的幾種方法總結(jié)

    本篇文章主要是對(duì)js 動(dòng)態(tài)加載事件的幾種方法進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-12-12
  • Javascript新手入門(mén)之字符串拼接與變量的應(yīng)用

    Javascript新手入門(mén)之字符串拼接與變量的應(yīng)用

    這篇文章主要給大家介紹了關(guān)于Javascript新手入門(mén)之字符串拼接與變量應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • javascript設(shè)計(jì)模式 – 狀態(tài)模式原理與用法實(shí)例分析

    javascript設(shè)計(jì)模式 – 狀態(tài)模式原理與用法實(shí)例分析

    這篇文章主要介紹了javascript設(shè)計(jì)模式 – 狀態(tài)模式,結(jié)合實(shí)例形式分析了javascript狀態(tài)模式相關(guān)概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • JavaScript模塊模式實(shí)例詳解

    JavaScript模塊模式實(shí)例詳解

    這篇文章主要介紹了JavaScript模塊模式,結(jié)合實(shí)例形式詳細(xì)分析了js模塊模式的相關(guān)概念、功能、擴(kuò)展等操作技巧,需要的朋友可以參考下
    2017-10-10
  • JavaScript 特有方法計(jì)算二進(jìn)制中1的個(gè)數(shù) split方法

    JavaScript 特有方法計(jì)算二進(jìn)制中1的個(gè)數(shù) split方法

    這是一道網(wǎng)上看到的前端的筆試題,主要思想是利用JavaScript的toString方法將十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制的字符串。然后for循環(huán)遍歷計(jì)算字符串中”1″出現(xiàn)的次數(shù)。
    2010-05-05

最新評(píng)論