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 相关文章推荐
Save a File Using a File Save Dialog Box
Jun 18 Javascript
JavaScript 学习笔记(四)
Dec 31 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
Jul 25 Javascript
JS事件Event元素(兼容IE,Firefox,Chorme)
Nov 01 Javascript
Jquery的hide及toggle方法让超链接慢慢消失
Sep 06 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
Apr 14 Javascript
Javascript遍历table中的元素示例代码
Jul 08 Javascript
jQuery中append()方法用法实例
Dec 25 Javascript
微信小程序之发送短信倒计时功能
Aug 30 Javascript
phantomjs导出html到pdf的方法总结
Oct 19 Javascript
boostrap模态框二次弹出清空原有内容的方法
Aug 10 Javascript
对vux点击事件的优化详解
Aug 28 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
单位速度在实战中的运用
2020/03/04 星际争霸
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
php合并数组并保留键值的实现方法
2018/03/12 PHP
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
JS简单实现禁止访问某个页面的方法
2016/09/13 Javascript
微信小程序 参数传递详解
2016/10/24 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
python批量同步web服务器代码核心程序
2014/09/01 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
Cython编译python为so 代码加密示例
2019/12/23 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
浅谈html5之sse服务器发送事件EventSource介绍
2017/08/28 HTML / CSS
HTML5之消息通知的使用(Web Notification)
2018/10/30 HTML / CSS
体育教育个人自荐信范文
2013/12/01 职场文书
毕业生求职信的经典写法
2014/01/31 职场文书
上班玩手机检讨书
2014/02/17 职场文书
yy生日主持词
2014/03/20 职场文书
横幅标语大全
2014/06/17 职场文书
小学课外阅读总结
2014/07/09 职场文书
中标通知书格式
2015/04/17 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
工作年限证明范本
2015/06/15 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
《为人民服务》教学反思
2016/02/20 职场文书
正能量励志演讲稿三分钟(范文)
2019/07/11 职场文书
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang