定义和方法
replace()方法用于在字符串中用一些字符串替换另一些字符,或者替换一个与正则表达式匹配的子串。
语法
stringObject.replace(regexp/substr,replacement)
regexp/substr:
必需。规定子字符串或要替换的模式的 RegExp 对象。
请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。
replacement:
必需。一个字符串值。规定了替换文本或生成替换文本的函数。
函数最后返回一个新的字符串,是用replacement替换了regexp的第一次匹配或所有匹配之后得到的。
- ECMAScript规定,replace()方法的参数replacement可以是函数而不是字符串,在这种情况下,每个匹配都调用该函数,它返回的字符串将替换文本使用。
函数里的形参有与否,用arguments来指向更为合理,当replacement是函数的时候,其参数个数情况如下:
- 如果正则匹配里没有分组匹配,那么函数参数只有三个。
- 如果正则匹配有分组匹配,那么函数的参数为3+n,n为分组的个数,不管是否匹配到,如没匹配到,其值为undefined
arguments返回参数含义
- 第一个参数表示参数匹配到的字符串
- 中间参数为子表达式匹配字符串,个数不限,匹配regexp对象中某个圆括号子表达式的字符串,可能是0个或多个这样的参数
- 倒数第二个参数表述匹配到的子字符串在字符串中开始匹配的位置
- 最后一个参数调用replace方法的字符串
var Q="efabcbdddef"
Q.replace(/(a)(b)/g, function(i,j,k,q,e){
console.log(i+'|'+j+'|'+k+'|'+q+'|'+e);
console.log(arguments[4])
console.log(Array.prototype.slice.call(arguments,0);
});
console.log(Q);
》》》》》
ab|a|b|2|efabcbdddef
{ '0': 'ab', '1': 'a', '2': 'b', '3': 2, '4': 'efabcbdddef' }
[ 'ab', 'a', 'b', 2, 'efabcbdddef' ]
efabcbdddef
在正则表达式中,比如(/(^|\s)([a-z])/g)中 2==(|\s), 2 == ( | \s ) , 3==([a-z]),大概是这个样子进行匹配的
function capitialize(str){
return str.replace(/(^|\s)([a-z])/g, function($1, $2, $3){
console.log(arguments);
return $2+$3.toUpperCase();
});
}
console.log(capitialize("i am a boy, not a girl!"));
》》》》
{ '0': 'i',
'1': '',
'2': 'i',
'3': 0,
'4': 'i am a boy, not a girl!' }
{ '0': ' a',
'1': ' ',
'2': 'a',
'3': 1,
'4': 'i am a boy, not a girl!' }
{ '0': ' a',
'1': ' ',
'2': 'a',
'3': 4,
'4': 'i am a boy, not a girl!' }
{ '0': ' b',
'1': ' ',
'2': 'b',
'3': 6,
'4': 'i am a boy, not a girl!' }
{ '0': ' n',
'1': ' ',
'2': 'n',
'3': 11,
'4': 'i am a boy, not a girl!' }
{ '0': ' a',
'1': ' ',
'2': 'a',
'3': 15,
'4': 'i am a boy, not a girl!' }
{ '0': ' g',
'1': ' ',
'2': 'g',
'3': 17,
'4': 'i am a boy, not a girl!' }
I Am A Boy, Not A Girl!