Javascript中replace()小结


Posted in Javascript onSeptember 30, 2015

关于定义

  replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

关于语法

stringObject.replace(regexp/substr,replacement)

关于参数

参数 描述
regexp/substr 必需。规定子字符串或要替换的模式的 RegExp 对象。 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。
replacement 必需。一个字符串值。规定了替换文本或生成替换文本的函数。

1、第一个参数regexp/substr,使用正则表达式时用全局标识符g,可以替换所有匹配的子串,否则只会匹配一次。

    例如:

var str = "aaaaa"; 
var str1 = str.replace("a", "b");
var str2 = str.replace(/a/g, "b");

  运行结果: str1 -> "baaaa",str2 -> "bbbbb"

2、第二个参数replacement,可以是字符串或者function,也可以是$字符具有的特定的含义。

字符 替换文本
$1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$& 与 regexp 相匹配的子串。
$` 位于匹配子串左侧的文本。
$' 位于匹配子串右侧的文本。
$$ 直接量符号。

   a. function的例子:

var str = "111222aa";
str.replace(/(\d{3})/g, function(word){
 return "b";
});

     运行结果: "bbaa"

    b. $的例子

var str = "1234567890";
str.replace( /(\d{3})(\d{3})(\d{4})/g, "$1-$2-$3" );

     运行结果: "123-456-7890"

注: 大多时候是利用regexp和$的结合来实现需求,所以知道一些基本的正则表达式规则是有必要的。

字符串替换字符串

'I am loser!'.replace('loser','hero')

//I am hero!
直接使用字符串能让自己从loser变成hero,但是如果有2个loser就不能一起变成hero了。

'I am loser,You are loser'.replace('loser','hero');
//I am hero,You are loser

正则表达式替换为字符串

'I am loser,You are loser'.replace(/loser/g,'hero')
//I am hero,You are hero

使用正则表达式,并将正则的global属性改为true则可以让所有loser都变为hero

有趣的替换字符

replaceValue可以是字符串。如果字符串中有几个特定字符的话,会被转换为特定字符串。

字符 替换文本
$& 与正则相匹配的字符串
$` 匹配字符串左边的字符
$' 匹配字符串右边的字符
$1,$2,$,3,…,$n 匹配结果中对应的分组匹配结果
使用$&字符给匹配字符加大括号

var sStr='讨论一下正则表达式中的replace的用法';
sStr.replace(/正则表达式/,'{$&}');
//讨论一下{正则表达式}中的replace的用法
使用$`和$'字符替换内容

'abc'.replace(/b/,"$`");
//aac
'abc'.replace(/b/,"$'");
//acc
使用分组匹配组合新的字符串

'nimojs@126.com'.replace(/(.+)(@)(.*)/,"$2$1")
//@nimojs
replaceValue参数可以是一个函数

StringObject.replace(searchValue,replaceValue)中的replaceValue可以是一个函数.
如果replaceValue是一个函数的话那么,这个函数的arguments会有n+3个参数(n为正则匹配到的次数)

先看例子帮助理解:

function logArguments(){ 
 console.log(arguments);
//["nimojs@126.com", "nimojs", "@", "126.com", 0, "nimojs@126.com"] 
 return '返回值会替换掉匹配到的目标'
}
console.log(
 'nimojs@126.com'.replace(/(.+)(@)(.*)/,logArguments)
)

参数分别为

匹配到的字符串(此例为nimojs@126.com,推荐修改上面代码的正则来查看匹配到的字符帮助理解)
如果正则使用了分组匹配就为多个否则无此参数。(此例的参数就分别为”nimojs”, “@”, “126.com”。推荐修改正则为/nimo/查看控制台中返回的arguments值)
匹配字符串的对应索引位置(此例为0)
原始字符串(此例为nimojs@126.com)
使用自定义函数将A-G字符串改为小写

'JAVASCRIPT'.replace(/[A-G]/g,function(){
 return arguments[0].toLowerCase();
})
//JaVaScRIPT

使用自定义函数做回调式替换将行内样式中的单引号删除

'<span style="font-family:\'微软雅黑\';">demo</span>'.replace(/\'[^']+\'/g,function(){  
 var sResult=arguments[0];
 console.log(sResult);//'微软雅黑'
 sResult=sResult.replace(/\'/g,'');
 console.log(sResult);
//微软雅黑
 return sResult;
})
//<span style="font-family:微软雅黑;">demo</span>
Javascript 相关文章推荐
用js实现计算代码行数的简单方法附代码
Aug 13 Javascript
关于Javascript作用域链的八点总结
Dec 06 Javascript
JS 作用域与作用域链详解
Apr 07 Javascript
基于Jquery和html5的7款个性化地图插件
Nov 17 Javascript
下一代Bootstrap的5个特点 超酷炫!
Jun 17 Javascript
HTML5 canvas 9绘制图片实例详解
Sep 06 Javascript
vue translate peoject实现在线翻译功能【新手必看】
Jun 07 Javascript
详解vue项目中调用百度地图API使用方法
Apr 25 Javascript
js实现二级联动简单实例
Jan 11 Javascript
JavaScript简单编程实例学习
Feb 14 Javascript
JS JQuery获取data-*属性值方法解析
Sep 01 jQuery
解决vue-pdf查看pdf文件及打印乱码的问题
Nov 04 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
Sep 30 #Javascript
谈谈JavaScript异步函数发展历程
Sep 29 #Javascript
JavaScript 对象深入学习总结(经典)
Sep 29 #Javascript
深入浅析JavaScript中对事件的三种监听方式
Sep 29 #Javascript
jQuery中的ajax async同步和异步详解
Sep 29 #Javascript
网页从弹窗页面单选框传值至父页面代码分享
Sep 29 #Javascript
pace.js页面加载进度条插件
Sep 29 #Javascript
You might like
PHP生成静态页面详解
2006/11/19 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
thinkphp验证码的实现(form、ajax实现验证)
2016/07/28 PHP
IE bug table元素的innerHTML
2010/01/11 Javascript
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
js判断鼠标同时离开两个div的思路及代码
2013/05/31 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
一个简单的JavaScript Map实例(分享)
2016/08/03 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
JS简单实现数组去重的方法分析
2017/10/14 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
[02:42]DOTA2英雄基础教程 杰奇洛
2013/12/23 DOTA
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
Python 稀疏矩阵-sparse 存储和转换
2017/05/27 Python
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
DataFrame.to_excel多次写入不同Sheet的实例
2019/12/02 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
利达恒信公司.NET笔试题面试题
2016/03/05 面试题
CSMA/CD介质访问控制协议
2015/11/17 面试题
运动会广播稿50字
2014/01/26 职场文书
小学数学教学反思
2014/02/02 职场文书
部队党性分析材料
2014/02/16 职场文书
校园安全演讲稿
2014/05/09 职场文书
2015元旦节寄语
2014/12/08 职场文书
补充协议书
2015/01/28 职场文书
后勤个人工作总结
2015/02/28 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
在JavaScript中如何使用宏详解
2021/05/06 Javascript
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技