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
Nov 26 Javascript
JavaScript中的noscript元素属性位置及作用介绍
Apr 11 Javascript
jQuery中:reset选择器用法实例
Jan 04 Javascript
JavaScript基于ajax编辑信息用法实例
Jul 15 Javascript
javascript实现禁止鼠标滚轮事件
Jul 24 Javascript
javascript获取select标签选中的值
Jun 04 Javascript
PHP捕捉异常中断的方法
Oct 24 Javascript
教你5分钟学会用requirejs(必看篇)
Jul 25 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
Jul 31 Javascript
7个好用的JavaScript技巧分享(译)
May 07 Javascript
原生js实现文件上传、下载、封装等实例方法
Jan 05 Javascript
React Native登录之指纹登录篇的示例代码
Nov 03 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处理斐波那契数列非递归方法
2012/02/04 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
让html页面不缓存js的实现方法
2014/10/31 Javascript
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
2016/12/02 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
详解基于node.js的脚手架工具开发经历
2019/01/28 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
Python实现加载及解析properties配置文件的方法
2018/03/29 Python
使用Python轻松完成垃圾分类(基于图像识别)
2019/07/09 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
pycharm 安装JPype的教程
2019/08/08 Python
python控制台实现tab补全和清屏的例子
2019/08/20 Python
python 3.8.3 安装配置图文教程
2020/05/21 Python
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
什么是设计模式
2012/06/17 面试题
酒店管理专业自荐信
2014/05/23 职场文书
房屋认购协议书
2015/01/29 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
党支部创先争优公开承诺书
2015/04/30 职场文书
小学生心理健康活动总结
2015/05/08 职场文书
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
解析Redis Cluster原理
2021/06/21 Redis
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS
SpringBoot使用ip2region获取地理位置信息的方法
2022/06/21 Java/Android