javascript replace要领

javascript字符串要领replace照样比较壮大的,做个笔记总结。

第一个参数

replace的第一个参数为字符串或许正则表达式。第二个参数为替代符,或许一个回调函数。

javascript'aadbbbd'.replace('a','1')
//"1adbbbd"
'aadbbbd'.replace(/a/,'1')
//"1adbbbd"

第二个参数

1.第二个参数为特殊标记

$1、$2、…、$99:与正则表达式中的第1~99个子表达式相婚配的文本。实在也能够在1-9之间,加上0前缀。
该标记针对的是分组,所以,没有分组的话,会被当作$n字符来做替代。

$&:(美圆标记+连字符):与正则表达式相婚配的子字符串。

$`:(美圆标记+切换妙技键):位于婚配子字符串左边的文本。

$':(美圆标记+单引号):位于婚配子字符串右边的文本。

$$:示意$标记。

代码示例:

javascript'中国群众'.replace(/(中国)/g,'($1)')
//"(中国)群众"
'cdab'.replace(/(ab)/g,'$`')
//"cdcd"
'abcd'.replace(/(ab)/g,"$'")
//"cdcd"
'abcdabcd'.replace(/(ab)/g,"[$&]")
//"[ab]cd[ab]cd"
'$1$2wa,test'.replace(/[a-zA-z]/g,'$$');
//"$1$2$$,$$$$"

假如有10个分组,然则我想在婚配第一个分组的背面加个0,怎样办?
也就是说,怎样让js去做10和1的辨别?

用事实说话:

javascript'abcdefghijkkkk'.replace(/(a)/g,"$10")
//"a0bcdefghijkkkk"

'abcdabcd'.replace(/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)/g,"$10")
//"jkkkk"

这个有点为难了,然则却难不倒函数啊!

2.第二个参数为函数

假如第二个参数传入函数,那末,正则表达式没有定义捕捉组的情况下,默以为三个参数,分别为:matched(婚配子串),婚配下标,原串(originalText)。不然,第2至n个参数对应为捕捉组婚配项,倒数的两个参数为:婚配下标,原串(originalText)。

函数的婚配返回值,作为每次的婚配替代值

javascript'123'.replace(/\d/g,function(m1,m2,m3){
  return m3+'#'
})
//"123#123#123#"
'abcdedddabc12323abc'.replace(/[abc]/g,function(matched,index,originalText){
  return matched+'~'
})
//"a~b~c~deddda~b~c~12323a~b~c~"
'abcdedddabc12323abc'.replace(/[abc]/g,function(matched,index,originalText){
  return '~'
})
//"~~~deddd~~~12323~~~"
'abcdeabc'.replace(/[ab]/g,function(matched,index,originalText){
  return '['+index+']';
})
//"[0][1]cde[5][6]c"

接下来,我们来做个问题,请求对一个串的反复部分举行替代处置惩罚,比方:abcabcaabbbdd,该串中abc紧接着abca后紧接着a,不管反复多少次,我们都用#替代掉。

javascript//由于有一个捕捉组,所以,须要再通报1参数 $1
'abcaabbccccdddabcabcef'.replace(/(\w+)\1+/g,function(matched,$1,index,originalText){
   return '#';
})
//"abc#####ef"

假如只是保存非反复部分,也就是紧衔接的aaa,只须要保存a即可。那末我们能够这么改:

javascript'abcaabbccccdddabcabcef'.replace(/(\w+)\1+/g,function(matched,$1,index,originalText){
   return $1;
})
//"abcabccdabcef"
    原文作者:52lidan
    原文地址: https://segmentfault.com/a/1190000000584042
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞