這看起來很荒唐簡單,但我很難想到一個乾淨的方式來做到這一點。替換一個字符串切片
考慮:
var str = "foo bar foo bar foo bar";
我想和任意長度的任意字符串來替換第二「富欄」實例(即,str.substring(8, 15)
)。
這看起來很荒唐簡單,但我很難想到一個乾淨的方式來做到這一點。替換一個字符串切片
考慮:
var str = "foo bar foo bar foo bar";
我想和任意長度的任意字符串來替換第二「富欄」實例(即,str.substring(8, 15)
)。
爲什麼不使用
var str = "foo bar foo bar foo bar";
str = str.substring(0, 8) + "my new string" + str.substring(15)
你甚至可以用概括:
var token = "foo bar";
var newStr = "my new string";
var str = "foo bar foo bar foo bar";
str = str.substring(0, token.length+1) +
newStr +
str.substring(token.length*2+1);
對我來說那些「哦,呵呵」時刻之一 - 非常感謝。 (只要SO讓我回答就會回答) – Aaron
@Aaron:我們都有那些日子:) –
你可以使用正則表達式:
"foo bar foo bar foo bar".replace(/foo bar (foo bar)/, '$1 testest'); // foo bar testtest foo bar
"notfoo notbar foo bar foo bar".replace(/foo bar (foo bar)/, '$1 testest'); // notfoo notbar foo bar testtest
或
var token = "foo bar";
var newStr = "new string";
var rg = new RegExp(token + ' (' + token + ')');
"foo bar foo bar foo bar".replace(rg, '$1 ' + newStr);
我通常喜歡用Array.splice method對於這樣的事情:
var str = "foo bar foo bar foo bar".split('');
str.splice(8, 7, 'newstring');
str = str.join('');
//"foo bar newstring foo bar"
如果你打算要重用這個,然後將其添加到字符串:
if (!String.prototype.splice)
{
String.prototype.splice = function(index, howmany, element){
var arr = this.split('');
arr.splice(index, howmany, element);
return arr.join('');
};
}
當然這是一個僅處理單個插入元素的簡單示例。數組的拼接可以處理多個元素,但正因爲如此,這些字符串無論如何都會被連接起來,因此提供了一個元素。
使用這種方法,你可以撥打:
a = "foo bar foo bar foo bar".splice(8, 7, 'newstring');
//a is now 'foo bar newstring foo bar'
我寫了一個原型方法吧:
String.prototype.sliceReplace = function(start, end, repl) {
return this.substring(0, start) + repl + this.substring(end);
};
var s = "12345678";
s.sliceReplace(2,4, "-----"); // "12-----5678"
當然,在這種情況下,這是作爲串聯一個新的字符串到結束微不足道。 – Blazemonger