字符串替换:replace的使用

eplace是JS字符串处理函数中最常用的函数之一,由于有正则表达式的支持,replace功能非常强大。同时,使用replace函数对于学习正则表达式非常重要,可以说,熟练掌握了replace函数,JS的正则就很简单了。

一、语法



str.replace(regexp|substr, newSubStr|function)
/***正则替换 0-9%()*/
str.replace(/[0-9%()]/g, '')

JavaScript里replace是绑定在字符串原型链上的一个函数,该函数接收两个参数,第一个参数可以是字符串或者正则表达式,描述了需要替换的子字符串;第二个参数则可以是一个字符串或者一个回调函数,用来描述替换值。字符串是不可变对象,该函数不改变原字符串,返回值为替换后的字符串。

二、使用字符串替换一个子串


把字符串中的'ab'子串替换为'xy':


>'abcd'.replace('ab','xy')
> xycd
>'abcdab'.replace('ab','xy')
> xycdab

可以看出,默认情况下仅第一个匹配参数的子串会被替换。如果想替换所有子字符串,则replace的第一个参数应该接收一个正则表达式,并且正则表达式需包含 g 标志:


>'abcdab'.replace(/ab/g,'xy')
> xycdxy

三、使用通配符


replace的第二个参数是字符串的时候,可以在字符串中使用一些通配符,这些通配符都是以特殊字符$开头:

变量名

代表的值

$$

插入一个 "$"。

$&

插入匹配的子串。

$`

插入当前匹配的子串左边的内容。

$'

插入当前匹配的子串右边的内容。

$n

假如第一个参数是 RegExp对象,并且 n 是个小于100的非负整数,那么插入第 n 个括号匹配的字符串。提示:索引是从1开始

比如常用的一个场景是,将金额格式化,每三位数用逗号分隔:


>let sText ='123456789.10'
>let reg =/(\d)(\d{3})([,.]|$)/
>while(reg.test(sText)) sText = sText.replace(reg,"$1,$2$3")
>123,456,789.10

四、使用函数描述替换值


replace的第二个参数是函数的时候,该函数接收多个参数,如下表。

变量名

代表的值

match

匹配的子串。(对应于上述的$&。)

p1,p2, ...

假如replace()方法的第一个参数是一个RegExp 对象,则代表第n个括号匹配的字符串。(对应于上述的$1,$2等。)例如,如果是用 /(\a+)(\b+)/ 这个来匹配,p1 就是匹配的 \a+,p2 就是匹配的 \b+。

offset

匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是 'abcd',匹配到的子字符串是 'bc',那么这个参数将会是 1)

string

被匹配的原字符串。

NamedCaptureGroup

命名捕获组匹配的对象

例(来自思否社区的一个问题):给string类型增加一个format方法,格式字符串有2种格式

  • my name is {0},age is {1},填充到{0} {1}去,比如 format("张三",28)

  • my name is {name},age is {age},那么参数应该是个对象,按照key的值填充到vaule,比如format({name:张三,age:28})

很类似一个模板解析的功能,我们可以使用replace函数来完成这个需求:


String.prototype.format=function(){
    let args =typeof arguments[0]==='object'? arguments[0]: arguments  
    return this.replace(/\{(.*?)\}/g,(m, p1)=> p1 in args ? args[p1]: m)
}

测试:


let result ='name: {name}, age: {age}'.format({ name:'mumaa', age:25})
console.log(result)
result2 ='name: {0}, age: {1}'.format('mumaa',25)
console.log(result2)> name: mumaa, age:25> name: mumaa, age:25
  • 2
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李宏伟~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值