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代码
Jul 20 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
Dec 14 Javascript
js实现创建删除html元素小结
Sep 30 Javascript
jQuery表单验证插件解析(推荐)
Jul 21 Javascript
轻松掌握JavaScript策略模式
Aug 25 Javascript
文件上传插件SWFUpload的使用指南
Nov 29 Javascript
jQuery实现模拟flash头像裁切上传功能示例
Dec 11 Javascript
Vue中CSS动画原理的实现
Feb 13 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
Dec 29 Javascript
一篇文章带你从零快速上手Rollup
Sep 07 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
Jan 07 Vue.js
关于对TypeScript泛型参数的默认值理解
Jul 15 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 应用程序的安全 -- 不能违反的四条安全规则
2006/11/26 PHP
wordpress之wp-settings.php
2007/08/17 PHP
php框架Phpbean说明
2008/01/10 PHP
php阻止页面后退的方法分享
2014/02/17 PHP
php解析xml方法实例详解
2015/05/12 PHP
PHP实现连接设备、通讯和发送命令的方法
2015/10/13 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
2016/04/01 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
JavaScript 模拟用户单击事件
2009/12/31 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
2016/05/11 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
Vue触发式全局组件构建的方法
2018/11/28 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
python中如何使用朴素贝叶斯算法
2017/04/06 Python
Python运维开发之psutil库的使用详解
2018/10/18 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
在python中实现对list求和及求积
2018/11/14 Python
python实现三维拟合的方法
2018/12/29 Python
Python File(文件) 方法整理
2019/02/18 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
在pycharm中debug 实时查看数据操作(交互式)
2020/06/09 Python
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
迟到检讨书400字
2014/01/13 职场文书
初中同学聚会感言
2014/02/11 职场文书
《盘古开天地》教学反思
2014/02/28 职场文书
《放飞蜻蜓》教学反思
2014/04/27 职场文书
投资建议书模板
2014/05/12 职场文书
群众路线教育实践活动学习笔记内容
2014/11/06 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
高考百日冲刺决心书
2015/09/23 职场文书