【JavaScript】详解JavaScript中的replace()函数
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()函数相关推荐
- python join_详解Python中的join()函数的用法
函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符) ...
- python中index函数_详解python中的index函数用法
1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...
- python3中input输入浅谈_详解Python3中的 input() 函数
详解Python3中的 input() 函数 一.知识介绍: 1.input() 函数,接收任意输入,将所有输入默认为字符串处理,并返回字符串类型: 2.可以用作文本输入,如用户名,密码框的值输入: ...
- 【Kay】详解Python中的random()函数
1.python中的random函数 random() 方法返回随机生成[0,1)范围内的一个实数 randint(a,b)方法随机生成a到b范围内的一个整数 randrange(a,b,c)方法生成 ...
- python中怎么做分组问题_详解Python中的分组函数groupby和itertools)
具体代码如下所示: from operator import itemgetter #itemgetter用来去dict中的key,省去了使用lambda函数 from itertools impor ...
- jQuery动画高级用法(上)——详解animation中的.queue()函数
如果你拿着一个疑问去找专业人士寻找答案,那么你的一个疑问会变成三个,因为他会用另外两个令你更加一头雾水的名词来解释你的这个疑问. 我想这是大多数,包括我在内,IT人在学习过程中碰到的最大问题.当你有一 ...
- python中index方法详解_详解python中的index函数用法
1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...
- What is the Softmax Function?详解机器学习中的Softmax函数【小白菜可懂】
目录 定义 公式 计算 Softmax vs Sigmoid Softmax vs Sigmoid 计算 Softmax vs Argmax Softmax vs Argmax 计算 应用 神经网络中 ...
- python grid函数_详解numpy中的meshgrid函数用法
numpy中的meshgrid函数的使用 numpy官方文档meshgrid函数帮助文档https://docs.scipy.org/doc/numpy/reference/generated/num ...
- python中的zip函数详解_python中的 zip函数详解
python中zip()函数用法举例 定义:zip([iterable, ...]) zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple ...
最新文章
- 关于VC的dialog框PreTranslateMessage不响应现象及解决办法
- 微型计算机中存储器分成哪几个等级?它们各有什么特点?用途如何?,《微机原理》复习思考题第十二章存储器.DOC...
- mysql boolean 和bool_关于 MySQL 的 boolean 和 tinyint(1)
- 五,通道之间的数据传输
- 【2020团体程序设计天梯赛】L1部分(PTA,L1-065到L1-072)题解代码
- numpy教程:基本输入输出和文件输入输出Input and output
- 小米双频AC智能路由器699元震撼首发
- 计算机的三种基础运算,计算机基础知识(计算机的基本运算).ppt
- 地理大数据下载网址推荐
- 三菱plc 毕设_软件分享 | 学习PLC,这个PLC仿真软件你需要知道
- 直流电压前馈控制数字逆变电源设计与实现
- 新手自己搭建服务器步骤
- 学习笔记 Tianmao 篇 自定义 ToolBar
- 《HTML5 2D游戏编程核心技术》——第1章,第1.5节开始Snail Bait游戏编程
- unity3D游戏开发实战原创视频讲座系列13之帽子戏法游戏开发(预告)
- 最新v4.2版本CRMEB商城API接口文档标准版后台(一)
- 电子--软件--电子(嵌入式)--学习之路断得漫长
- 人性歪曲的心理调适 一【犹豫心理、怯场心理、依赖心理、盲从心理、攀比心理】...
- python的代码块使用什么控制类、函数以及其他逻辑判断_一篇文章教会你什么是Python模仿强类型...
- 2018教师计算机考试成绩查询,2018下半年教师资格考试成绩查询入口