2011-08-29 108 views
2

這看起來很荒唐簡單,但我很難想到一個乾淨的方式來做到這一點。替換一個字符串切片

考慮:

var str = "foo bar foo bar foo bar"; 

我想和任意長度的任意字符串來替換第二「富欄」實例(即,str.substring(8, 15))。

+0

當然,在這種情況下,這是作爲串聯一個新的字符串到結束微不足道。 – Blazemonger

回答

6

爲什麼不使用

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

對我來說那些「哦,呵呵」時刻之一 - 非常感謝。 (只要SO讓我回答就會回答) – Aaron

+0

@Aaron:我們都有那些日子:) –

1

你可以使用正則表達式:

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

我通常喜歡用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' 
0

我寫了一個原型方法吧:

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"