博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS基础篇--replace替换全部的正确应用
阅读量:6830 次
发布时间:2019-06-26

本文共 1984 字,大约阅读时间需要 6 分钟。

一般使用

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

使用正则:

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

循环替换

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

var faces = {  "/::)": "weixiao",  "/::~": "pizui",  "/::B": "se",  "/::|": "fadai",  "/:8-)": "deyi",  "/::<":"liulei",  "/::$": "haixiu",  "/::'(": "daku",  "/::-|": "gangga"};var str = "/::)-/::B-/::)-/:8-)-/:8-)";for (var k in faces) {  while(str.indexOf(k) > -1) {    str = str.replace(k, faces[k]);  }}console.log(str);

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

var faces = {  "/::)": "weixiao",  "/:hehe": "/:hehe"};var str = "/::)-/::B-/:hehe-/:8-)-/:8-)";for (var k in faces) {  while(str.indexOf(k) > -1) {    str = str.replace(k, faces[k]);  }}console.log(str);

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

var faces = {  "/::)": "weixiao",  "/:hehe": "/:hehe"};var str = "/::)-/::B-/:hehe-/:8-)-/:8-)";for (var k in faces) {  var p = -1; // 字符出现位置  var s = 0; // 下一次起始位置  while((p = str.indexOf(k, s)) > -1) {    s = p + faces[k].length; // 位置 + 值的长度    str = str.replace(k, faces[k]);  }}console.log(str);

再进行简单封装一下:

/** * 字符串替换 * @param  {string} str    要被替换的字符串 * @param  {string} substr 要替换的字符串 * @param  {string} newstr 用于替换的字符串 * @return {string}        替换后的新字符串 */function replace(str, substr, newstr) {  var p = -1; // 字符出现位置  var s = 0; // 下一次起始位置  while((p = str.indexOf(substr, s)) > -1) {    s = p + newstr.length; // 位置 + 值的长度    str = str.replace(substr, newstr);  }  return str;}console.log( replace("ssssss", "ss", "s") ); // sss

使用RegExp封装

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

参考地址:

转载地址:http://vtnkl.baihongyu.com/

你可能感兴趣的文章
Jenkins CI CD
查看>>
HTML5铸就VMware新特性,WSX技术能让浏览器远程运行虚拟桌面 .
查看>>
win32 编辑窗口与按钮完整使用 --------------- 学习记录
查看>>
Cordova学习笔记 angular controller及ng-repeat指定的使用
查看>>
2.2 nagios 监控客户端
查看>>
linux 制作BT种子并获取BT种子信息
查看>>
Building C Projects
查看>>
iOS:XCode 4.2开始Objective-C支持ARC
查看>>
IntelliJ+scala开发环境配置
查看>>
如何解决笔记本键盘的虚拟键盘问题
查看>>
dabo aui editra 三个软件(框架or应用)之间有关系
查看>>
brew使用
查看>>
Swift语言快速入门
查看>>
学LIUNX的常用英语补习
查看>>
单点登录CAS解决方案<一>:纯净CAS-Server
查看>>
linux 下配置mysql主从同步的步骤
查看>>
CodeIgniter pdo与postgres原生驱动对bool类型取值是不同的
查看>>
Mysql 数据库表区分大小写问题
查看>>
Linux中命令选项及参数简介
查看>>
什么是openstack的metadata
查看>>