replace用法1 - 基础用法
最核心的易错点:如果要替换全部匹配项,需要传入一个 RegExp 对象并指定其 global 属性。
基本用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
myString = "javascript is a good script language"; //在此我想将字母a替换成字母A console.log(myString.replace("a","A")); // 我想大家运行后可以看到结果,它只替换了找到的第一个字符,如果想替换多个字符怎么办? // 答案:结合正则表达式,这也是replace的核心用法之一! // 打印结果 jAvascript is a good script language //将字母a替换成字母A 错误的写法 少了/g myString = "javascript is a good script language"; console.log(myString.replace(/a/,"A")); // 打印结果 jAvascript is a good script language //将字母a替换成字母A 正确的写法 /g表示匹配所有 myString = "javascript is a good script language"; console.log(myString.replace(/a/g,"A")); // 打印结果 jAvAscript is A good script lAnguAge |
replace用法2 - 高级用法 特殊标记$
对于正则replace约定了一个特殊标记符$:
1、$i (i:1-99) : 表示从左到右正则子表达式所匹配的文本。
2、$&:表示与正则表达式匹配的全文本。
3、$
(
:切换技能键):表示匹配字符串的左边文本。4、$'(‘:单引号):表示匹配字符串的右边文本。
5、$$:表示$转移。
案例1- 匹配后替换
1 2 3 4 5 |
//在本例中,我们将把所有的花引号替换为直引号: myString = '"a", "b"'; myString = myString.replace(/"([^"]*)"/g, "'$1'");//寻找所有的"abb"形式字符串,此时组合表示字符串,,然后用'$1'替换 console.log(myString) // 打印结果 'a', 'b' |
案例2- 匹配后替换
1 2 3 4 |
myString= "javascript is a good script language"; console.log(myString.replace(/(javascript)\s*(is)/g,"$1 $2 fun. it $2")); // $1代表第一个括号里面的内容(javascript) $2就是第二个括号里面的内容(is),依次类推 // 打印结果 javascript is fun. it is a good script language |
案例3 - 分组匹配后颠倒
1 2 3 4 5 |
//在本例中,我们将把 "itcast,cn" 转换为 "cn itcast" 的形式: myString = "itcast , cn"; myString = myString.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1"); console.log(myString) // 打印结果 cn itcast |
案例4 - 分组匹配后颠倒
1 2 3 4 |
myString = "boy & girl"; myString.replace(/(\w+)\s*&\s*(\w+)/g,"$2 & $1") //girl & boy console.log(myString) // 打印结果 boy & girl |
案例5--其它特殊标记用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// $&:表示与正则表达式匹配的全文本。 myString = "boy"; myString.replace(/\w+/g,"$&-$&") // boy-boy console.log(myString) // 打印结果 boy // $`(`:切换技能键):表示匹配字符串的左边文本。 myString = "javascript"; myString.replace(/script/,"$& != $`") //javascript != java console.log(myString) // 打印结果 javascript // $'(‘:单引号):表示匹配字符串的右边文本。 myString = "javascript"; myString.replace(/java/,"$&$' is ") // javascript is script console.log(myString) // 打印结果 javascript |
replace用法3 - 高级用法
第二个参数可以是函数 - 最常用 必考点
replace第二个参数可以传递函数,如果第二参数是一个函数的话,那么函数的参数是什么呢?
1 2 3 4 5 6 7 8 9 10 |
myString = "bbabc"; myString.replace(/(a)(b)/g, function(){ console.log(arguments) // 打印结果 ["ab", "a", "b", 2, "bbabc"] }); // 参数将依次为: // 1、整个正则表达式匹配的字符。 // 2、第一分组匹配的内容、第二分组匹配的内容…… 以此类推直到最后一个分组。 // 3、此次匹配在源自符串中的下标(位置)。 // 4、源自符串 // 所以例子的输出是 ["ab", "a", "b", 2, "bbabc"] |
用法案例1
将首字符转为大写-在本例中,我们将把字符串中所有单词的首字母都转换为大写:
1 2 3 4 5 6 |
myString = 'aaa bbb ccc'; myString=myString.replace(/\b\w+\b/g, function(word){ return word.substring(0,1).toUpperCase()+word.substring(1);} ); console.log(myString) // 打印结果 Aaa Bbb Ccc |
用法案例2
1 2 3 4 5 6 7 8 9 |
// 在本案例中,处理函数的第一个参数:匹配的字符串,第二个参数:括号中的值 var sss={"name":'院长'}; function formateString(str,json){ return str.replace(/#\((\w+)\)/g,function(word,key){ return json[key]; }) } console.log(formateString("欢迎#(name)来到",sss)); // 打印结果 欢迎院长来到 |