replace

  • 1. 方法简介
  • 2. replace()使用
    • 2.1 replace(字符串,字符串)
    • 2.2 replace(正则表达式,字符串)
    • 2.3 replace(正则表达式,function(){})
      • 2.3.1 简单用法,正则表达式不使用分组
      • 2.3.2 复杂用法,正则表达式使用分组

1. 方法简介

该方法的签名是:replace([RegExp|String],[String|Function])

该方法 返回一个新的字符串,但并不改变字符串本身。

该方法接收2个参数,
第一个参数可以是字符串,也可以是一个正则表达式;
第二个参数可以是一个字符串,也可以是一个函数。

2. replace()使用

2.1 replace(字符串,字符串)

假如我们有一个字符串中出现了错别字”背景“,需要用”北京“来替换,那么我们可以如下搞定:

let str = '我爱背景天安门';
str = str.replace('背景','北京');
console.log(str);   // 输出结果:我爱北京天安门

但这个用法有一个问题:

let str = '我爱背景天安门,但是背景雾霾太严重';
str = str.replace('背景','北京');
// 输出结果:我爱北京天安门,但是背景雾霾太严重
console.log(str);

我们发现,如果字符串str中有多个待替换的子串,比如本例中的“背景”,出现了2次,那么replace()方法只能给我们用目标字符串(北京)替换掉第1次出现的"背景"。

如果想把所有的"背景"都给替换了,就必须调用多次。

此使用方法bug: 只能替换一次 多次替换需要多次调用


2.2 replace(正则表达式,字符串)

let str = '我爱背景天安门,但是背景雾霾太严重';
str = str.replace(/背景/g,'北京');
// 输出结果:我爱北京天安门,但是北京雾霾太严重
console.log(str);

这里需要说明的是,str.replace(/背景/g,“北京”)的第一个参数 ”/背景/g“ 是一个正则表达式,使用/ /的正则写法是JavaScript中正则表达式的字面量写法。
在此处,正则表达式的末尾有个g,它表示match源字符串str中所有匹配项。
这里如果没有g,那么也只能匹配到第一个错别字”背景“,只有加了这个g,才能匹配到所有的”背景“。


2.3 replace(正则表达式,function(){})

以上的用法还是比较直观的,但是能实现的功能也比较简单,如果需要做一些复杂的字符串替换运算,那么就需要使用较为高级(复杂)的用法,就是 正则+function 的用法。说白了就是第一参数传一个正则表达式,我们下面称之为RegArg;第二个参数给一个函数,我们下面称之为FuncArg。这也是replace()的核心用法。

本质对str使用RegArg做match()匹配,如果匹配到多项结果(比如使用了全局匹配g,或者分组),那么每一个匹配结果都将执行一次FuncArg函数,并且用该函数的返回值替代源字符串中的匹配项。


2.3.1 简单用法,正则表达式不使用分组

let str = '我爱背景天安门,但是背景雾霾太严重';
str = str.replace(/背景/,function(){console.log(arguments);return '北京'
});console.log(str);


解析:

  • 本例的目的是:把原字符串中的’背景’,替换为’北京’。
  • 正则表达式没有使用全局匹配符g,所以只替换了源字符串中第一个‘背景’子串,FuncArg只执行了一次。

replace()函数第一个参数是简单正则表达式,第二个参数是函数时:
这个函数是有参数的,而且这些参数是默认的。

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

.本例如果想替换所有的‘背景’为‘北京’,只需要让正则表达式后加个g。

let str = '我爱背景天安门,但是背景雾霾太严重';
str = str.replace(/背景/g,function(){console.log(arguments);return '北京'
});console.log(str);

我们可以看到,输出了2个Arguments,因为我们使用全局匹配g后,会match到2个项,所以就执行了2次function。
第一个跟前边一样,第二个arugments的索引位置是10,因为源字符串中第二个‘背景’的索引是10.


eg:把捐款是100元以下的金额数用‘**’来替换掉。

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 复杂用法,正则表达式使用分组

eg:这个例子的意图是:把所有以“万”为单位的捐款,其金额改为‘元’。比如 :4万,改为40000元

var txt ='刘菲:5万。张常成:5000元。孙玉杰:2000元。李明轩:20万。李子豪:8500元。';
txt = txt.replace(/(\d+)(万)/g,function(){console.log(arguments);return arguments[1] + '0000' + '元';
});console.log(txt);

输出结果是: 

 
replace()函数第一个参数是分组正则表达式,第二个参数是函数时:

  • arguments[0]是匹配到的子字符串
  • arguments[1]是匹配到的第1个分组项
  • arguments[2]是匹配到的第2个分组项
  • arguments[3]是匹配到的字符串的索引位置
  • arguments[4]是源字符串本身

【JavaScript】详解JavaScript中的replace()函数相关推荐

  1. python join_详解Python中的join()函数的用法

    函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符) ...

  2. python中index函数_详解python中的index函数用法

    1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...

  3. python3中input输入浅谈_详解Python3中的 input() 函数

    详解Python3中的 input() 函数 一.知识介绍: 1.input() 函数,接收任意输入,将所有输入默认为字符串处理,并返回字符串类型: 2.可以用作文本输入,如用户名,密码框的值输入: ...

  4. 【Kay】详解Python中的random()函数

    1.python中的random函数 random() 方法返回随机生成[0,1)范围内的一个实数 randint(a,b)方法随机生成a到b范围内的一个整数 randrange(a,b,c)方法生成 ...

  5. python中怎么做分组问题_详解Python中的分组函数groupby和itertools)

    具体代码如下所示: from operator import itemgetter #itemgetter用来去dict中的key,省去了使用lambda函数 from itertools impor ...

  6. jQuery动画高级用法(上)——详解animation中的.queue()函数

    如果你拿着一个疑问去找专业人士寻找答案,那么你的一个疑问会变成三个,因为他会用另外两个令你更加一头雾水的名词来解释你的这个疑问. 我想这是大多数,包括我在内,IT人在学习过程中碰到的最大问题.当你有一 ...

  7. python中index方法详解_详解python中的index函数用法

    1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...

  8. What is the Softmax Function?详解机器学习中的Softmax函数【小白菜可懂】

    目录 定义 公式 计算 Softmax vs Sigmoid Softmax vs Sigmoid 计算 Softmax vs Argmax Softmax vs Argmax 计算 应用 神经网络中 ...

  9. python grid函数_详解numpy中的meshgrid函数用法

    numpy中的meshgrid函数的使用 numpy官方文档meshgrid函数帮助文档https://docs.scipy.org/doc/numpy/reference/generated/num ...

  10. python中的zip函数详解_python中的 zip函数详解

    python中zip()函数用法举例 定义:zip([iterable, ...]) zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple ...

最新文章

  1. 关于VC的dialog框PreTranslateMessage不响应现象及解决办法
  2. 微型计算机中存储器分成哪几个等级?它们各有什么特点?用途如何?,《微机原理》复习思考题第十二章存储器.DOC...
  3. mysql boolean 和bool_关于 MySQL 的 boolean 和 tinyint(1)
  4. 五,通道之间的数据传输
  5. 【2020团体程序设计天梯赛】L1部分(PTA,L1-065到L1-072)题解代码
  6. numpy教程:基本输入输出和文件输入输出Input and output
  7. 小米双频AC智能路由器699元震撼首发
  8. 计算机的三种基础运算,计算机基础知识(计算机的基本运算).ppt
  9. 地理大数据下载网址推荐
  10. 三菱plc 毕设_软件分享 | 学习PLC,这个PLC仿真软件你需要知道
  11. 直流电压前馈控制数字逆变电源设计与实现
  12. 新手自己搭建服务器步骤
  13. 学习笔记 Tianmao 篇 自定义 ToolBar
  14. 《HTML5 2D游戏编程核心技术》——第1章,第1.5节开始Snail Bait游戏编程
  15. unity3D游戏开发实战原创视频讲座系列13之帽子戏法游戏开发(预告)
  16. 最新v4.2版本CRMEB商城API接口文档标准版后台(一)
  17. 电子--软件--电子(嵌入式)--学习之路断得漫长
  18. 人性歪曲的心理调适 一【犹豫心理、怯场心理、依赖心理、盲从心理、攀比心理】...
  19. python的代码块使用什么控制类、函数以及其他逻辑判断_一篇文章教会你什么是Python模仿强类型...
  20. 2018教师计算机考试成绩查询,2018下半年教师资格考试成绩查询入口

热门文章

  1. 【解题报告】博弈专场(CF2200~2400)后五题
  2. 微服务架构学习与思考(05):微服务架构适用场景分析
  3. 树莓派做无线打印服务器,怎样用树莓派制作无线打印机
  4. 【Android 开发实例】时间管理APP开发
  5. 深度学习(机器学习)算法面试(一)
  6. Linux使用apt安装库,究竟怎样才可以更快?
  7. Java 面试题宝典 (每天更新)
  8. x:null扩展 什么意思
  9. k8s-node暂停和排水
  10. win10找不到小米蓝牙项圈耳机青春版