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
紧接着abc
,a
后紧接着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"