一般使用

  1. var str = "test-test-test";
  2. str = "test-test-test".replace("test", "ok");
  3. console.log(str);

使用正则:

  1. var str = "test-test-test";
  2. str = "test-test-test".replace(/test/g, "ok");
  3. console.log(str);

循环替换

如下这种情况,表情标签的替换,我们需要正常的字符串替换,例如结合 while + indexOf 实现。

  1. var faces = {
  2. "/::)": "weixiao",
  3. "/::~": "pizui",
  4. "/::B": "se",
  5. "/::|": "fadai",
  6. "/:8-)": "deyi",
  7. "/::<":"liulei",
  8. "/::$": "haixiu",
  9. "/::'(": "daku",
  10. "/::-|": "gangga"
  11. };
  12.  
  13. var str = "/::)-/::B-/::)-/:8-)-/:8-)";
  14.  
  15. for (var k in faces) {
  16. while(str.indexOf(k) > -1) {
  17. str = str.replace(k, faces[k]);
  18. }
  19. }
  20.  
  21. console.log(str);

这样,基本功能实现,不过这是有问题的,如果有一个键值相同的,就会死循环例如:

  1. var faces = {
  2. "/::)": "weixiao",
  3. "/:hehe": "/:hehe"
  4. };
  5.  
  6. var str = "/::)-/::B-/:hehe-/:8-)-/:8-)";
  7.  
  8. for (var k in faces) {
  9. while(str.indexOf(k) > -1) {
  10. str = str.replace(k, faces[k]);
  11. }
  12. }
  13.  
  14. console.log(str);

修改为如下代码解决死循环问题:

  1. var faces = {
  2. "/::)": "weixiao",
  3. "/:hehe": "/:hehe"
  4. };
  5.  
  6. var str = "/::)-/::B-/:hehe-/:8-)-/:8-)";
  7.  
  8. for (var k in faces) {
  9. var p = -1; // 字符出现位置
  10. var s = 0; // 下一次起始位置
  11. while((p = str.indexOf(k, s)) > -1) {
  12. s = p + faces[k].length; // 位置 + 值的长度
  13. str = str.replace(k, faces[k]);
  14. }
  15. }
  16.  
  17. console.log(str);

再进行简单封装一下:

  1. /**
  2. * 字符串替换
  3. * @param {string} str 要被替换的字符串
  4. * @param {string} substr 要替换的字符串
  5. * @param {string} newstr 用于替换的字符串
  6. * @return {string} 替换后的新字符串
  7. */
  8. function replace(str, substr, newstr) {
  9. var p = -1; // 字符出现位置
  10. var s = 0; // 下一次起始位置
  11.  
  12. while((p = str.indexOf(substr, s)) > -1) {
  13. s = p + newstr.length; // 位置 + 值的长度
  14. str = str.replace(substr, newstr);
  15. }
  16.  
  17. return str;
  18. }
  19.  
  20. console.log( replace("ssssss", "ss", "s") ); // sss

使用RegExp封装

  1. /**
  2. * 字符串替换
  3. * @param {string} str 要被替换的字符串
  4. * @param {string} substr 要替换的字符串
  5. * @param {string} newstr 用于替换的字符串
  6. * @return {string} 替换后的新字符串
  7. */
  8. function replace(str, substr, newstr) {
  9. substr = substr.replace(/[.\\[\]{}()|^$?*+]/g, "\\$&"); // 转义字符串中的元字符
  10. var re = new RegExp(substr, "g"); // 生成正则
  11. return str.replace(re, newstr);
  12. }
  13.  
  14. console.log( replace("ssssss", "ss", "s") ); // sss

参考地址:http://www.52cik.com/2015/11/06/replace-all.html

JS中replace替换全部的正确应用的更多相关文章

  1. Js中replace替换所有*

    var t = '***感**谢**有**你***'; var r = t.replace(/\*/g,''); //\为转义字符 g表示全局 console.log(r) //感谢有你

  2. js中replace用法

    js中replace的用法 replace方法的语法是:stringObj.replace(rgExp, replaceText) 其中stringObj是字符串(string),reExp可以是正则 ...

  3. 关于js的replace替换

    关于js的replace替换 msgContent = msgContent.replace("a","b"); 这样的替换只会把第一个a替换成b,不会替换全部 ...

  4. mysql中replace替换字符串更改方法

    MySQL中update替换部分字符串replace的简单用法 近日,遇到了需要将部分字符串替换为另外的字符,平时用的最多的是直接update整个字段值,在这种情况下效率比较低,而且容易出错.其实my ...

  5. [转载]js正则表达式/replace替换变量方法

    原文地址:http://www.blogjava.net/pingpang/archive/2012/08/12/385342.html JavaScript正则实战(会根据最近写的不断更新) 1.j ...

  6. js正则表达式/replace替换变量方法

    转自:http://www.blogjava.net/pingpang/archive/2012/08/12/385342.html 1. javascript 正则对象替换创建和用法:/patter ...

  7. js中字符替换函数String.replace()使用技巧

    定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 语法 stringObject.replace(regexp/substr,replac ...

  8. js中replace的正则替换

    temp: video":"\t<ul class=\"g-list tabview-cont on\">\t\r\n\t\t<li clas ...

  9. JS使用replace替换字符串中的某段或某个字符

    函数的介绍参考:http://www.w3school.com.cn/jsref/jsref_replace.asp 下列代码将Hello World!中的World替换为Jim <html&g ...

随机推荐

  1. numpy创建矩阵常用方法

    numpy创建矩阵常用方法 arange+reshape in: n = np.arange(0, 30, 2)# start at 0 count up by 2, stop before 30 n ...

  2. Python - 使用Setuptools进行程序打包

    1- Setuptools简介 通过Setuptools可以更方便的创建和发布Python包,特别是那些对其它包具有依赖性的状况: Python打包用户指南(Python Packaging User ...

  3. 【design patterns】设计模式

    1.单例设计模式(singleton) 用途举例:对于多个程序使用同一个配置信息对象时比如在连接数据库时使用单例模式,每次只取出一个连接 步骤:①私有化该类的构造函数 ②私有化一个静态的对象 ③公有化 ...

  4. node-sqlite3 学习笔记

    * 使用sqlite3持久化数据 * 需求:把一个数组中的每个对象,每个对象中的属性,存到xxx.db文件中去,像数据库一样的去操作它 * 功能:1. 创建数据库(数据库存在的话,那就直接打开) * ...

  5. 【python35小工具】b站弹幕保存

    后面有时间学习弹框,加个弹框 效果图: 原理: 原理简单不繁琐 1 根据设置的参数去post请求json参数 2 json提取出用户名和时间以及弹幕内容 (其中值得注意的时,页面默认会保存10个弹幕, ...

  6. 谷歌浏览器中安装Axure扩展程序

    当使用谷歌浏览器预览Axure原型文件的时候,首次打开会出现以下界面: 我们按照图片中的步骤来即可,不过前提条件是翻.墙[我使用的是蓝灯,下载地址:https://github.com/getlant ...

  7. 关于富文本编辑器ueditor(jsp版)上传文件到阿里云OSS的简单实例,适合新手

    关于富文本编辑器ueditor(jsp版)上传文件到阿里云OSS的简单实例,适合新手   本人菜鸟一枚,最近公司有需求要用到富文本编辑器,我选择的是百度的ueditor富文本编辑器,闲话不多说,进入正 ...

  8. ①泡茶看数据结构-表ADT

    前言     小朽,晚上回到寝室.烧了开水,又泡了一杯下午喝了的小毛尖.耳机听着萨克斯,总结下今天学的数据结构和算法中的表ADT.       表ADT节点: #单链表   #双链表   #循环链表 ...

  9. ClickHouse之clickhouse-local

    一直在慢慢的摸索clickhouse,之前是用rpm包安装的,没有发现clickhouse-local,最近在centos上面编译成功以后发现多了clickhouse-local,那么这个玩意是什么鬼 ...

  10. Linux常用命令之链接命令和权限管理命令

    目录 1.链接命令 一.生成链接文件命令:ln 2.权限管理命令3.总结 一.更改文件或目录权限命令:chmod 二.改变文件或目录所有者命令:chown 三.改变文件或目录所属组命令:chgrp 四 ...