平常运用
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