原生js中的replace方法
原生js中的replace方法
本文主要研究 字符串方法中的replace方法。该方法主要用于将字符串中符合匹配条件的字符串替换成其他的字符串,返回替换后的字符串,且原字符串不变。
语法:
var newStr = str.replace(regexp|substr,newSubstr|function)
- 参数1:匹配条件:正则表达式(regexp)|| 字符串(substr)
- 在没有全局标志g 和捕获组的情况下:只能匹配一次
var str = '#home#home' var pattern = /home/ var result = str.replace(pattern,'替换'); console.log(result);//#替换#home
- 在有全局标志g 的情况下:可以实现全局多次匹配
var str = '#home#home' var pattern = /home/g var result = str.replace(pattern,'替换'); console.log(result);// #替换#替换
- 在有捕获组的情况下
var str = 'John Smith is me'; var pattern = /(\w+)\s(\w+)/; var result = str.replace(pattern,'cgz') console.log(result);// cgz is me
- 参数2:替换字符串(newSubStr)|| 方法(function)
- 参数2的字符串可以插入以下特殊的变量名
$$:插入一个 $
$&:插入匹配的子串
$`:插入当前匹配的子串左边的内容
$':插入当前匹配的子串右边的内容
$n:假如第一个参数是RegExp对象,并且n是个小于100的非负整数,那么插入第n个括号匹配的字符串。索引是从1开始。
最常见的特殊变量名是$n:
var str = 'John Smith is me'; var pattern = /(\w+)\s(\w+)/; var result = str.replace(pattern,'$2 $1') console.log(result);// Smith John is me
-
参数2是函数
该函数可能有以下几个参数:- match:每次匹配得到的字符串。如果正则表达式中含有全局标志g 的话,那么函数每次匹配到结果都会执行一次,即函数会执行多次,每次匹配得到的字符串就是match。
'borderLeftWidth'.replace(/[A-Z]/g,function(L){return '-'+L.toLowerCase()});//'border-left-width'
- p1, p2…: 捕获组匹配到的字符串。如果正则表达式中含有捕获组的话,
'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/,function(match, p1, p2, p3, offset, string){return [p1,p2,p3].join(' - ')});//'abc - 12345 - #$*%'
- 参数2的字符串可以插入以下特殊的变量名
未来的我会感谢现在努力的自己。