javascript中replace使用方法总结


Posted in Javascript onMarch 01, 2017

ECMAScript提供了replace()方法。这个方法接收两个参数,第一个参数可以是一个RegExp对象或者一个字符串,第二个参数可以是一个字符串或者一个函数。现在我们来详细讲解可能出现的几种情况。

1. 两个参数都为字符串的情况

var text = 'cat, bat, sat, fat';
 // 在字符串中找到at,并将at替换为ond,只替换一次
 var result = text.replace('at', 'ond');
// "cond, bat, sat, fat"
 console.log(result);

2. 第一个参数为RegExp对象,第二个参数为字符串

我们可以发现上面这种情况只替换了第一个at,如果想要替换全部at,就必须使用RegExp对象。

var text = 'cat, bat, sat, fat';
 // 使用/at/g 在全局中匹配at,并用ond进行替换
 var result = text.replace(/at/g, 'ond');
 // cond, bond, sond, fond
 console.log(result);

3. 考虑RegExp对象中捕获组的情况 

RegExp具有9个用于存储捕获组的属性。$1, $2...$9,分别用于存储第一到九个匹配的捕获组。我们可以访问这些属性,来获取存储的值。

var text = 'cat, bat, sat, fat';
 // 使用/(.at)/g 括号为捕获组,此时只有一个,因此所匹配的值存放在$1中
 var result = text.replace(/(.at)/g, '$($1)');
 // $(cat), $(bat), $(sat), $(fat)
 console.log(result);

4. 第二个参数为函数的情况,RegExp对象中不存在捕获组的情况

var text = 'cat, bat, sat, fat';
 // 使用/at/g 匹配字符串中所有的at,并将其替换为ond,
 // 函数的参数分别为:当前匹配的字符,当前匹配字符的位置,原始字符串
 var result = text.replace(/at/g, function(match, pos, originalText) {
  console.log(match + ' ' + pos);
  return 'ond'
 });
 console.log(result);
 // 输出
 /*
  at 1 dd.html:12:9
  at 6 dd.html:12:9
  at 11 dd.html:12:9
  at 16 dd.html:12:9
  cond, bond, sond, fond dd.html:16:5
 */

5. 第二个参数为函数的情况,RegExp对象中存在捕获组的情况

var text = 'cat, bat, sat, fat';
 // 使用/(.at)/g 匹配字符串中所有的at,并将其替换为ond,
 // 当正则表达式中存在捕获组时,函数的参数一次为:模式匹配项,第一个捕获组的匹配项,
 // 第二个捕获组的匹配项...匹配项在字符串中的位置,原始字符串
 var result = text.replace(/.(at)/g, function() {
  console.log(arguments[0] + ' ' + arguments[1] + ' ' + arguments[2]);
  return 'ond'
 });
 console.log(result);
 // 输出
 /*
  cat at 1 
  bat at 6 
  sat at 11 
  fat at 16 
  cond, bond, sond, fond 
 */

以上为replace方法的所有可以使用的情况,下面我们使用replace和正则表达式共同实现字符串trim方法。

(function(myFrame) {
  myFrame.trim = function(str) {
   // ' hello world '
   return str.replace(/(^\s*)|(\s*$)/g, '');
  };
  window.myFrame = myFrame;
 })(window.myFrame || {});
 // 测试
 var str = ' hello world '
 console.log(str.length); // 15
 console.log(myFrame.trim(str).length); // 11

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript之水平横向滚动歌词同步的应用
May 07 Javascript
jQuery toggle()设置CSS样式
Nov 05 Javascript
javascript 同时在IE和FireFox获取KeyCode的代码
Feb 07 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
Dec 18 Javascript
第七章之菜单按钮图标组件
Apr 25 Javascript
jQuery组件easyui基本布局实现代码
Aug 25 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
May 28 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
Aug 20 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
May 15 Javascript
Element图表初始大小及窗口自适应实现
Jul 10 Javascript
vue 修改 data 数据问题并实时显示操作
Sep 07 Javascript
详细分析JavaScript中的深浅拷贝
Sep 17 Javascript
jQuery validate 验证radio实例
Mar 01 #Javascript
提高JavaScript执行效率的23个实用技巧
Mar 01 #Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
Mar 01 #Javascript
分分钟玩转Vue.js组件(二)
Mar 01 #Javascript
js实现带三角符的手风琴效果
Mar 01 #Javascript
JavaScript拖动层Div代码
Mar 01 #Javascript
vue组件间通信解析
Mar 01 #Javascript
You might like
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
PHP HTML代码串截取代码
2008/12/29 PHP
php 信息采集程序代码
2009/03/17 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
XML的代替者----JSON
2007/07/21 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
2017/09/14 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
[37:22]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第一局
2016/02/28 DOTA
Python返回真假值(True or False)小技巧
2015/04/10 Python
Python使用dis模块把Python反编译为字节码的用法详解
2016/06/14 Python
python魔法方法-自定义序列详解
2016/07/21 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
Python 实现数据结构-堆栈和队列的操作方法
2019/07/17 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
Python实现链表反转的方法分析【迭代法与递归法】
2020/02/22 Python
python中线程和进程有何区别
2020/06/17 Python
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
函授本科毕业自我鉴定
2013/10/09 职场文书
求职简历自荐信范文
2013/10/21 职场文书
高中生的自我鉴定范文
2014/01/24 职场文书
作弊检讨书1000字
2014/02/01 职场文书
群众路线个人整改措施
2014/10/24 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
学期个人自我总结
2015/02/13 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
python执行js代码的方法
2021/05/13 Python
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang