序
replace的第一个参数通常是正则表达式,用于匹配要替换的文本;第二个参数通常是字符串,用于替换规则匹配的文本。
其实replace远比上面强大,内部包装也很完善,远没有我们想象的那么简单。我们来详细说说replace的第二个参数。
示例介绍
现在,我们需要实现一个函数,将HTML中的字符实体转换成它们对应的字符,比如:''到: ' '。
让我们看看代码实现:
string . prototype . deentityfy=(function(){ var entity={ lt : ' ',gt : ' ' };return函数(){ return this.replace(/([^;] );/g,函数(a,b,c,d){ console . log(' a : ' a '-b : ' b '-c : ' c '-d : ' d);var r=实体[b];返回类型为r==='string '?r : a;})})}))document . write(' h1(' h1我是标题/h1 '。defentityfy());在这里,我们必须谈论字符实体,以避免下面的混乱。
字符实体不会被解析为HTML语句。例如,上面的段落“h1我是标题/h1”被输出到页面。我们看到的是这样的:
H1只是由浏览器作为字符串输出,而不是标签。上面的代码将这些字符实体转换成相应的字符,可以由浏览器进行编译。
让我们一步步来看看上面的代码是如何实现的。
首先,String对象的原型是用deentityfy方法挂载的,这是一个自动执行的函数。以闭包的形式,函数中的所有内容对外界都是不可见的。
在函数中,我们定义了一个实体对象文字,它有两个属性,分别对应于标签的左尖括号和右尖括号。
接下来,返回一个匿名函数,写下我们想在这个函数中做什么。
我们调用replace方法,第一个参数放置一个正则表达式:
/([^;] );/g此正则表达式的匹配规则是:以“”开头,后跟一个或多个“”和“”的字符,带有';'结束。下面的g代表全局匹配。(有关正则表达式的更多信息,请点击此处)
这里强调一下,正则化中的“()”概念与javascript中的“()”概念不同,这里的括号术语叫做:捕获括号。简单来说,括号中匹配的字符是临时存储的,可以在后面的替换链接中取出使用。
接下来,我将详细谈谈replace的第二个参数,这是本文的重点。
我们通常在第二个参数中放一个字符串,直接用来替换匹配的字符;还有更高级的技能,使用$字符可以捕获括号中的内容,然后执行相关操作。
还有第三种方法,将匿名函数传递给第二个参数,并将该函数的返回值用作替换字符。
匿名函数有四个可以传入的参数。当然,这些参数不必传入。
第一个参数:正则化匹配的字符;
第二个参数:捕获括号捕获的字符;
第三个参数:规则匹配的每个字符的第一个字符的索引;
第四个参数:用于匹配的字符串体;
当我打印出上面代码的运行结果时,大家应该都很清楚:
摘要
好了,这就是本文的全部内容。我已经和“规律性”联系了将近三年。我不知道规律性有这么强大的功能。当然,我可能是无知的。希望大家保持一颗学习的心,一起进步。同时,也希望本文的内容能给大家的学习或工作带来一些帮助。有问题可以留言交流。