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

本文共 2032 字,大约阅读时间需要 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://www.52cik.com/2015/11/06/replace-all.html

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

你可能感兴趣的文章
Spring组件扫描<context:component-scan/>使用详解
查看>>
CodeIgniter(3.1.4)框架使用静态文件(js,css)
查看>>
python练习笔记——用函数对列表奇偶分类,且过程不增加新列表
查看>>
CentOS 6.9永久设置静态路由表以及路由表常用设置
查看>>
spring mvc : 中文传值(post/get)中文乱码
查看>>
Mysql中处理1970年前的日期(unixtime为负数的情况)负数时间戳格式化
查看>>
【转】单片机为什么叫单片机
查看>>
物联网架构成长之路(24)-Docker练习之Compose容器编排
查看>>
set 容器的用法
查看>>
iocp (改天完善)
查看>>
水波探测算法的实现
查看>>
JsDemo
查看>>
JQuery EasyUI Tree
查看>>
.net Sql server 事务的两种用法
查看>>
【143】360云盘资源
查看>>
gradle编译出错:Execution failed for task &#39;:app:compileTestDebugJava&#39;.
查看>>
django之创建第9个项目-管理后台admin
查看>>
中国电信某站点JBOSS任意文件上传漏洞
查看>>
030 分布式集群中,设定时间同步服务器,以及ntpd与ntpdate的区别
查看>>
Oracle10G 连接11G数据库,出现ORA -1017用户名/口令无效; 登录被拒绝 的问题
查看>>