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 相关文章推荐
在VS2008中使用jQuery智能感应的方法
Dec 30 Javascript
img onload事件绑定各浏览器均可执行
Dec 19 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
Jan 11 Javascript
javascript监听鼠标滚轮事件浅析
Jun 05 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
Aug 15 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
Jan 18 Javascript
Vue.js开发环境快速搭建教程
Mar 17 Javascript
vue2.0 中#$emit,$on的使用详解
Jun 07 Javascript
浅谈在Vue-cli里基于axios封装复用请求
Nov 06 Javascript
vue.js this.$router.push获取不到params参数问题
Mar 03 Javascript
vue-cli设置publicPath小记
Apr 14 Javascript
jQuery实现带进度条的轮播图
Sep 13 jQuery
利用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简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
php_screw 1.5:php加密: 安装与使用详解
2013/06/20 PHP
两个php日期控制类实例
2014/12/09 PHP
Zend Framework连接Mysql数据库实例分析
2016/03/19 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
jquery选择器使用详解
2014/04/08 Javascript
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
一个小例子解释如何来阻止Jquery事件冒泡
2014/07/17 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
简单谈谈axios中的get,post方法
2017/06/25 Javascript
jQuery完成表单验证的实例代码(纯代码)
2017/09/30 jQuery
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
微信小程序实现换肤功能
2018/03/14 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
Python编程实现蚁群算法详解
2017/11/13 Python
Python 占位符的使用方法详解
2019/07/10 Python
python3 assert 断言的使用详解 (区别于python2)
2019/11/27 Python
修改Pandas的行或列的名字(重命名)
2019/12/18 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
CSS3 3D立方体效果示例-transform也不过如此
2016/12/05 HTML / CSS
毕业生物理教师求职信
2013/10/17 职场文书
文秘人员工作职责
2014/01/31 职场文书
学生干部培训方案
2014/06/12 职场文书
小学生大队委竞选稿
2015/11/20 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
求职自我评价参考范文
2019/05/16 职场文书
24句精辟的现实社会语录,句句扎心,道尽人性
2019/08/29 职场文书
Android开发手册自定义Switch开关按钮控件
2022/06/10 Java/Android