JS基本篇--replace替代悉数的准确运用

平常运用

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/…

    原文作者:风雨后见彩虹
    原文地址: https://segmentfault.com/a/1190000013631899
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞