赞
踩
详解参看这里《replace详解》,我就不搬过来了,因为看完文章之后,对replace里面replacement的参数不太明白,查完资料后,在这里做个补充:
replace第一个参数可以是正则表达式也可以是字符串,第二个可以是字符串或者函数;
今天主要说说第二个参数是函数的情况,如果传入function的话,觉得应该是有4类
(注意:这里是类,因为中间的若干参数个数不定,是由与规则匹配的字符串来定的)
参数可以传入,如function(a,b,c,d){}
a表示匹配的整个字符串,如果replace第一参数传正则的话,并且有子字符串的话,b表示匹配的第一个子字符串,如果有两个子字符串,c表示第二个子字符串,…依次类推,直到没有匹配的字符串为止的下一个参数表示表示字符串匹配的初始位置,再往后的一个参数表示调用replace函数的原始字符串。例如:如果一个子字符串都没有匹配到,则b表示字符串匹配的初始位置,d表示调用replace函数的原始字符串
例如:replace经典用法
// 正则表达式括号内容是从左到右,从外到内来计算$1,$2,$3,$4的 (function () { let str = '222aaaa333Bbb666ccc9ZZ' let reg = /((\d([a-z]+))(\d+[A-Z]))/g let arr = str.match(reg) console.log(arr) // ['2aaaa333B', '6ccc9Z'] let str2 = str.replace(reg, function (match, p1, p2, p3, p4, p5, p6, p7) { console.log('match', match) // 2aaaa333B // 6ccc9Z console.log('p1', p1) // 2aaaa333Bbb // 6ccc9Z console.log('p2', p2) // 2aaaa // 6ccc console.log('p3', p3) // aaaa // ccc console.log('p4', p4) // 333B // 9Z console.log('p5', p5) // 2 // 15 console.log('p6', p6) // 222aaaa333Bbb666ccc9ZZ // 222aaaa333Bbb666ccc9ZZ console.log('p7', p7) // undefined // undefined return '***' // 把匹配到的字符串替换为对应的字符串 }) console.log('str2', str2) // 22***bb66***Z /*** * 结果解析: * 要点1:正则表达式括号内容是从左到右,从外到内来计算$1,$2,$3,$4的 * 要点2:因为是全局匹配(-g),故此正则匹配到此字符串的结果有两个:2aaaa333B、6ccc9Z;故replace要替换这两个字符串 * 要点3:replace传function时,各个参数的意义要明确: * match(整个匹配成功的字符串) * p1~p5(匹配成功字符串中的各个括号中匹配成功的字符串) * p6(正则各个括号中匹配成功的参数占用完之后的第一个参数)(代表从字符串的第几个位置开始匹配成功的) * p7(正则各个括号中匹配成功的参数占用完之后的第二个参数)(原字符串) * p8...(原字符串之后的所有字符串都是undefined) * * **/ })();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。