string.prototype.replace 和正则表达式
2017-06-15 23:26
141 查看
字符串的replace方法是操作字符串的常用方法之一,但这个方法只有当与正则合并使用时,才能体现出它的强大之处。
语法:
str.replace(regexp|substr, newsubStr|function);
返回值: 一个部分或全部匹配由替代模式所取代的新的字符串,因为字符串是不可变的原始类型。
基础用法
str.replace(substr, newsubStr);将字符串的一个子字符串,替换为另一个新的子字符串。比如:
'eabcabcabcabc'.replace('ab','df')//返回'edfcabcabcabc',只替换第一个子串 'abcabcabcabc'.replace(/ab/g,'df')//返回'dfcdfcdfcdfc',由于正则表达式的g,替换掉所有匹配到的`ab`
带正则的用法
其实前面已经带了一个简单的正则,但是这并没有显出如虎添翼的效果。想象一个场景,你想把一个类似于'201706'的字符串替换成'2017-06'的形式,我们可以这样实现:
'201706'.replace(/(\d{4})(\d{2})/,'$1-$2')//'2017-06' '13299259212'.replace(/(\d{3})(\d{4})(\d{4})/,'$1-$2-$3')
这个地方主要在于正则的捕获,上面的正则表达式,
\d{4}匹配字符串的前四个数字,
\d{2}匹配后两个数字,分别用小括号包起来,放到后边对应的
$1,
$2中,这里的
$1和
$2不是字面的意思。而是两个占位符,😄
除了
$n这个匹配捕获的占位符外,还有
$&,
$`,
$'这三个占位符:
说个题外话,一分钟前搜了一下,用markdown转义`字符时,最外层用两个 ``将里面的` 包起来就行,看起来像这样`` $` ``
MDN描述如下:
变量名 代表的值
$$插入一个 "$"。
$&插入匹配的子串。
$`插入当前匹配的子串左边的内容。
$'插入当前匹配的子串右边的内容。
$n假如第一个参数是 RegExp对象,并且 n 是个小于100的非负整数,那么插入第 n 个括号匹配的字符串。
前面说了$n代表()里捕获的z字符串,
$$相当于转义
$,下面说说另外的几个占位符
'abc'.replace(/b/,"$`")//aac,b前面是a,所以将b替换成a,得到a(a)c 'abc'.replace(/b/,"$'")//acc,b后面是c,所以将b替换为c,得到a(c)c 'aaabccc'.replace(/b/,"$`$'")//aaaaaacccccc,你懂的 'abcdefg'.replace(/b|c|f/g,'$&O')//abocodefog,这里$&分别代表bcf 'abcdefg'.replace(/(ab)c(de)/g,'$&O')//abcdeofg,这里$&代表abcde 'abcdefg'.replace(/\S{3}/g,'$&O')//abcOdefOg,这里$&代表abc和def
带函数的用法
这里就是将函数作为replace方法的第二个参数了,可以看作是上面的函数版和加强版
function replacer(match,$1,$2,$3,offset,string){ console.log('$&',match); console.log('$1',$1);//132 console.log('$2',$2);//9925 console.log('$3',$3);//9212 console.log('开始位置',offset); console.log('string',string); return(`${$1}-${$2}-${$3}`); } '13299259212'.replace(/(\d{3})(\d{4})(\d{4})/,replacer)
举个例子,将'AbCdEfddd'转换成'ab_cd_efddd'这样的形式,实现如下:
'AbCdEfddd'.replace(/[A-Z]/g, function(match, index, string){ if(index === 0){ return match.toLowerCase() } return '_' + match.toLowerCase() })
可以看出正则的占位符写法更直观也更简便,但函数写法会更自由。
参考链接:MDNhttps://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Syntax
相关文章推荐
- js中string之正则表达式replace方法详解
- String.replaceAll() 正则表达式
- 正则表达式,关于String.replaceALL()
- 正则表达式:string.replaceAll()中的特殊字符($ \)与matcher.appendReplacement
- 正则表达式,关于String.replaceALL()
- (转)正则表达式:string.replaceAll()中的特殊字符($ \)与matcher.appendReplacement
- String.replaceall正则表达式
- String 对象中的 正则表达式方法 replace
- JavaScript中String对象的match()、replace() 配合正则表达式使用
- string.replace()替换匹配给定的正则表达式的(一个或多个)子串
- 1基础-013-1:正则表达式:string.replaceAll()中的特殊字符($ \)与matcher.appendReplacement
- 【JavaScript】正则表达式--String.replace()变量替换的一点笔记
- [Javascript] String.replace 正则表达式及替换函数使用 $ 字符
- javascript笔记:String的replace(续),由正则表达式到jQuery选择器
- JS正则表达式怎样实现Java中String.replaceAll的效果
- 正则表达式的简单介绍和string.replace的用法
- javascript正则表达式中的replace方法详解
- 正则表达式,线程,StringBuffer和String
- 浅析正则表达式模式匹配的String方法
- 4种使用javascript正则表达式进行字符串replace操作的方法