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 相关文章推荐
原型方法的不同写法居然会影响调试的解决方法
Mar 08 Javascript
IE6图片加载的一个BUG解决方法
Jul 13 Javascript
JavaScript实现的日期控件具体代码
Nov 18 Javascript
node.js中的require使用详解
Dec 15 Javascript
js实现无缝滚动特效
Dec 20 Javascript
JS动态增删表格行的方法
Mar 03 Javascript
JavaScript编写一个简易购物车功能
Sep 17 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
Sep 04 Javascript
详解处理Vue单页面应用SEO的另一种思路
Nov 09 Javascript
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
Dec 05 Javascript
使用nvm和nrm优化node.js工作流的方法
Jan 17 Javascript
运用js实现图层拖拽的功能
May 24 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用正则表达式匹配中文实例详解
2013/11/06 PHP
eaglephp使用微信api接口开发微信框架
2014/01/09 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
2017/03/31 PHP
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
JS性能优化实现方法及优点进行
2020/08/30 Javascript
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
[06:50]DSPL次级职业联赛十强晋级之路
2014/11/18 DOTA
进一步探究Python中的正则表达式
2015/04/28 Python
Python记录详细调用堆栈日志的方法
2015/05/05 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
详解Python3.6安装psutil模块和功能简介
2018/05/30 Python
python使用scrapy发送post请求的坑
2018/09/04 Python
python实现支付宝转账接口
2019/05/07 Python
Python适配器模式代码实现解析
2019/08/02 Python
centos7之Python3.74安装教程
2019/08/15 Python
python中的RSA加密与解密实例解析
2019/11/18 Python
Python有参函数使用代码实例
2020/01/06 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
在 Python 中使用 MQTT的方法
2020/08/18 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
NFL官方在线商店:NFLShop
2020/07/29 全球购物
电子银行营销方案
2014/02/22 职场文书
保护环境建议书400字
2014/05/13 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers