成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS基礎(chǔ)篇--replace替換全部的正確應(yīng)用

jackzou / 1558人閱讀

摘要:一般使用使用正則循環(huán)替換如下這種情況,表情標(biāo)簽的替換,我們需要正常的字符串替換,例如結(jié)合實(shí)現(xiàn)。

一般使用
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);
循環(huán)替換

如下這種情況,表情標(biāo)簽的替換,我們需要正常的字符串替換,例如結(jié)合 while + indexOf 實(shí)現(xiàn)。

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);

這樣,基本功能實(shí)現(xiàn),不過這是有問題的,如果有一個鍵值相同的,就會死循環(huán)例如:

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);

修改為如下代碼解決死循環(huán)問題:

var faces = {
  "/::)": "weixiao",
  "/:hehe": "/:hehe"
};

var str = "/::)-/::B-/:hehe-/:8-)-/:8-)";

for (var k in faces) {
  var p = -1; // 字符出現(xiàn)位置
  var s = 0; // 下一次起始位置
  while((p = str.indexOf(k, s)) > -1) {
    s = p + faces[k].length; // 位置 + 值的長度
    str = str.replace(k, faces[k]);
  }
}

console.log(str);

再進(jìn)行簡單封裝一下:

/**
 * 字符串替換
 * @param  {string} str    要被替換的字符串
 * @param  {string} substr 要替換的字符串
 * @param  {string} newstr 用于替換的字符串
 * @return {string}        替換后的新字符串
 */
function replace(str, substr, newstr) {
  var p = -1; // 字符出現(xiàn)位置
  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, "$&"); // 轉(zhuǎn)義字符串中的元字符
  var re = new RegExp(substr, "g"); // 生成正則
  return str.replace(re, newstr);
}

console.log( replace("ssssss", "ss", "s") ); // sss

參考地址:http://www.52cik.com/2015/11/...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/93313.html

相關(guān)文章

  • JavaScript中8個常見陷阱

    摘要:然而,不會在年的基礎(chǔ)上加,而只是表示年。閉包這是一個經(jīng)典的面試題雖然期望輸出,然而實(shí)際上卻不會。因?yàn)榈谛械臎]有在正確的環(huán)境下執(zhí)行。 譯者按: 漫漫編程路,總有一些坑讓你淚流滿面。 原文: Who said javascript was easy ? 譯者: Fundebug 為了保證可讀性,本文采用意譯而非直譯。另外,本文版權(quán)歸原作者所有,翻譯僅用于學(xué)習(xí)。 這里我們針對JavaScri...

    doodlewind 評論0 收藏0
  • [ JS 進(jìn)階 ] test, exec, match, replace

    摘要:用法介紹注為的實(shí)例為的實(shí)例用法說明返回值判斷是否包含匹配結(jié)果包含返回,不包含返回。當(dāng)為全局的對象的時候,替換每一項(xiàng)匹配項(xiàng)。如下表所示,它說明從模式匹配得到的字符串將用于替換。字符替換文本與中的第到第個子表達(dá)式相匹配的文本。 上面這四個方法在js中用的很多,但有時對它們又不清晰,所以有必要來總結(jié)一下。 對了,這篇文章可能會涉及到正則表達(dá)式相關(guān)知識,所以推薦沒有正則基礎(chǔ)的去看看這篇入門文章...

    why_rookie 評論0 收藏0
  • 正則表達(dá)式-理論基礎(chǔ)

    摘要:正則表達(dá)式理論基礎(chǔ)篇搬運(yùn)自個人博客原址正則表達(dá)式理論基礎(chǔ)篇什么是正則表達(dá)式可以稱作規(guī)則一個描述字符模式的對象,正則表達(dá)式中的字母和數(shù)字,都是按照字面含義進(jìn)行匹配的。 正則表達(dá)式-理論基礎(chǔ)篇 搬運(yùn)自個人博客,原址正則表達(dá)式-理論基礎(chǔ)篇 什么是正則表達(dá)式?可以稱作規(guī)則一個描述字符模式的對象,正則表達(dá)式中的字母和數(shù)字,都是按照字面含義進(jìn)行匹配的。強(qiáng)大的字符串匹配工具 如何建立一個正則表達(dá)式...

    wanglu1209 評論0 收藏0
  • 正則表達(dá)式-理論基礎(chǔ)

    摘要:正則表達(dá)式理論基礎(chǔ)篇搬運(yùn)自個人博客原址正則表達(dá)式理論基礎(chǔ)篇什么是正則表達(dá)式可以稱作規(guī)則一個描述字符模式的對象,正則表達(dá)式中的字母和數(shù)字,都是按照字面含義進(jìn)行匹配的。 正則表達(dá)式-理論基礎(chǔ)篇 搬運(yùn)自個人博客,原址正則表達(dá)式-理論基礎(chǔ)篇 什么是正則表達(dá)式?可以稱作規(guī)則一個描述字符模式的對象,正則表達(dá)式中的字母和數(shù)字,都是按照字面含義進(jìn)行匹配的。強(qiáng)大的字符串匹配工具 如何建立一個正則表達(dá)式...

    vpants 評論0 收藏0

發(fā)表評論

0條評論

jackzou

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<