Javacript函数replace详解

定义和方法

replace()方法用于在字符串中用一些字符串替换另一些字符,或者替换一个与正则表达式匹配的子串。

语法

stringObject.replace(regexp/substr,replacement)

regexp/substr:

必需。规定子字符串或要替换的模式的 RegExp 对象。
请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。

replacement:

必需。一个字符串值。规定了替换文本或生成替换文本的函数

函数最后返回一个新的字符串,是用replacement替换了regexp的第一次匹配或所有匹配之后得到的。


  • ECMAScript规定,replace()方法的参数replacement可以是函数而不是字符串,在这种情况下,每个匹配都调用该函数,它返回的字符串将替换文本使用。
  • 函数里的形参有与否,用arguments来指向更为合理,当replacement是函数的时候,其参数个数情况如下:

    1. 如果正则匹配里没有分组匹配,那么函数参数只有三个。
    2. 如果正则匹配有分组匹配,那么函数的参数为3+n,n为分组的个数,不管是否匹配到,如没匹配到,其值为undefined

arguments返回参数含义

  1. 第一个参数表示参数匹配到的字符串
  2. 中间参数为子表达式匹配字符串,个数不限,匹配regexp对象中某个圆括号子表达式的字符串,可能是0个或多个这样的参数
  3. 倒数第二个参数表述匹配到的子字符串在字符串中开始匹配的位置
  4. 最后一个参数调用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(arguments0);
});
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 ) , 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!

猜你喜欢

转载自blog.csdn.net/qq_25073545/article/details/80293218