【JS学习笔记】replace() 的用法,例如第二个参数为function函数时

1,replace() 方法的第二个参数 replacement 可以是函数而不是字符串。

在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。

 

function(a,b,c,d)

该函数的第一个参数是匹配模式的字符串,第二个参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数第三个参数是一个整数,声明了匹配在 stringObject 中出现的位置,最后一个参数是 stringObject 本身。

JavaScript语言精粹中,第4 章函数一节,模块小节中提供了:

String.method("deentityify",function(){
    var entity={
        quot:'"',
        lt:'<',
        gt:'>'
    };
    return function(){
        return this.replace(/&([^&;]+);/g,function(a,b,c,d){
            //console.log(a,b,c,d)
           var r=entity[b];
            return typeof  r === 'string' ? r : a;
        }
      );
    };
}());

document.writeln('<">'.deentityify( ));

博主跑了该函数,发现无法输出。

将String添加新方法的部分改为了原型添加:

String.prototype.deentityify=function() { }();可以正常输出。

观察console.log(a,b,c,d)

可以看到第一次:a为匹配到的字符串,b为对应替换的字符串,c为替换的位置,d为整个要替换的字符串。

因为有三次符合条件,所以调用了三次函数。

2,replace()方法的第二个参数可以为“$”,$有特殊含义。

 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。

字符 替换文本
$1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$& 与 regexp 相匹配的子串。
$` 位于匹配子串左侧的文本。
$' 位于匹配子串右侧的文本。
$$ 直接量符号。

你可能感兴趣的:(JavaScript,小技巧)