视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
JavaScript函数replace揭秘
2020-11-27 20:30:28 责编:小采
文档


在JavaScript中replace函数作为字符串替换函数,这是一个威力强大的字符串操作函数,对于常见字符串操作的推荐用法。这篇随笔就来更加深入的理解它。
replace函数接受两个参数,第一个参数为字符串或正则表达式,第一个参数同样可以接受一个字符串,还可能是一个函数。
首先对于第一个参数为字符串的我们不再需要多说"I am a boy".replace("boy","girl"),输出:"I am a girl"。在这里想说的是第一个参数为正则的情形。对于正则表达式来说首先会根据是否全局的(全局//g)决定替换行为,如果是全部的则替换全部替换,非全局的只有替换首个匹配的字符串。例如:

"Ha Ha".replace(/\b\w+\b/g, "He") // He He

"Ha Ha".replace(/\b\w+\b/, "He") //He Ha

1:第二个参数为字符串:
对于正则replace约定了一个特殊标记符$:
1. $i (i:1-99) : 表示从左到右正则子表达式所匹配的文本。
2. $&:表示与正则表达式匹配的全文本。
3. $`(`:切换技能键):表示匹配字符串的左边文本。
4. $’(‘:单引号):表示匹配字符串的右边文本。
5. $$:表示$转移。
下面来几个demo:

"boy & girl".replace(/(\w+)\s*&\s*(\w+)/g,"$2 & $1") //girl & boy

"boy".replace(/\w+/g,"$&-$&") // boy-boy

"javascript".replace(/script/,"$& != $`") //javascript != java

"javascript".replace(/java/,"$&$' is ") // javascript is script

2:第二个参数为函数:
在ECMAScript3推荐使用函数方式,实现于JavaScript1.2.当replace方法执行的时候每次都会调用该函数,返回值作为替换的新值。
函数参数的规定:
1. 第一个参数为每次匹配的全文本($&)。
2. 中间参数为子表达式匹配字符串,个数不限.( $i (i:1-99))
3. 倒数第二个参数为匹配文本字符串的匹配下标位置。
4. 最后一个参数表示字符串本身。
这就是本文所要说replace威力强大的地方,理论的东西都是干货,我们需要示例解决一切空洞的问题:
1:字符串首字母大写:

String.prototype.capitalize = function(){ 
 
 return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); 
 
 } ); 
 
};

console.log("i am a boy !".capitalize())

输出:I Am A Boy !
2:对字符串“张三56分, 李四74分, 王五92分, 赵六84分”的分数提取汇总,算出平均分并输出每个人的平均分差距。

var s = "张三56分, 李四74分, 王五92分, 赵六84分";

var a = s.match(/\d+/g); 
 
var sum = 0; 
 
for(var i = 0 ; i < a.length; i++){ 
 
 sum += parseFloat(a[i]); 
 
} 
 
 
 
var avg = sum / a.length; 
 
 
 
function f(){ 
 
 var n = parseFloat(arguments[1]); 
 
 return n + "分" + "(" + ((n > avg) ? ("超出平均分" + (n - avg)) : 
 
 ("低于平均分" + (avg - n))) + "分)"; 
 
} 
 
 
 
var result = s.replace(/(\d+)分/g, f); 
 
console.log(result);

输出:
张三56分(低于平均分20.5分), 李四74分(低于平均分2.5分), 王五92分(超出平均分15.5分), 赵六84分(超出平均分7.5分)

在加上正则的高级应用,JavaScript的replace将会发回更大的威力所在,在这里将不再深入正则高级应用断言之类的。

下载本文
显示全文
专题