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 相关文章推荐
滚动图片效果 jquery实现回旋滚动效果
Jan 08 Javascript
屏蔽script注入小例子
Nov 12 Javascript
高效Web开发的10个jQuery代码片段
Jul 22 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
Sep 19 Javascript
如何快速上手Vuex
Feb 14 Javascript
Vue实战之vue登录验证的实现代码
Oct 31 Javascript
解决vue的变量在settimeout内部效果失效的问题
Aug 30 Javascript
node.js调用C++函数的方法示例
Sep 21 Javascript
js 实现在2d平面上画8的方法
Oct 10 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
Jun 05 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
Apr 09 Javascript
vue 实现用户登录方式的切换功能
Apr 14 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和ACCESS写聊天室(十)
2006/10/09 PHP
phpnow php探针环境检测代码
2014/11/04 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
2016/07/12 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
非常漂亮的JS代码经典广告
2007/10/21 Javascript
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
JavaScript预解析及相关技巧分析
2016/04/21 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
Javascript实现购物车功能的详细代码
2018/05/08 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
简单上手Python中装饰器的使用
2015/07/12 Python
Python计算两个日期相差天数的方法示例
2017/05/23 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
python学生信息管理系统
2018/03/13 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
Python定义一个函数的方法
2020/06/15 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
python 基于wx实现音乐播放
2020/11/24 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
高级电工工作职责
2013/11/21 职场文书
KTV的创业计划书范文
2014/02/02 职场文书
公司会计主管岗位责任制
2014/03/01 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书
朝花夕拾读书笔记
2015/06/29 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
三年级作文之趣事作文
2019/11/04 职场文书