2012-12-18 21 views
5

開始位置と長さを指定して文字列の部分文字列を置き換えるにはどうすればよいですか?文字列の部分文字列をJavaScriptの範囲に置き換えます。

私はこのような何かを期待していた:stringは、私はそのような何かを見つけることができません..but

"this is a replacement string" 

と等しくなるように

var string = "This is a test string"; 
string.replace(10, 4, "replacement"); 

助けてください。

このよう

答えて

7

:あなたは、文字列のプロトタイプに追加することができ

var outstr = instr.substr(0,start)+"replacement"+instr.substr(start+length); 

String.prototype.splice = function(start,length,replacement) { 
    return this.substr(0,start)+replacement+this.substr(start+length); 
} 

(それは同じ名前の配列関数と非常によく似ているので、私はspliceこれを呼び出す)

+0

私はあなたのアプローチも愚か 'dv'edされていることを参照してください。/' – VisioN

2

ショート正規表現バージョン:

str.replace(new RegExp("^(.{" + start + "}).{" + length + "}"), "$1" + word); 

例:

String.prototype.sreplace = function(start, length, word) { 
    return this.replace(
     new RegExp("^(.{" + start + "}).{" + length + "}"), 
     "$1" + word); 
}; 

"This is a test string".sreplace(10, 4, "replacement"); 
// "This is a replacement string" 

DEMO:http://jsfiddle.net/9zP7D/

+2

これは私が個人的にそれを行うだろうかです。 ♥正規表現。 – elclanrs

+1

Regexesは不必要に遅いです:http://jsperf.com/string-splice –

0

Underscore String libraryが指定したとおりに動作するスプライス方法があります。

_("This is a test string").splice(10, 4, 'replacement'); 
=> "This is a replacement string" 

ライブラリには他にも多くの便利な機能があります。それは8kbでクロックし、cdnjsで利用可能です。

+0

@ cr0nicz私はUnderscore.stringを参照していました。リンクを確認してください。 – tghw

0

この機能は、最初のインデックスと長さの代わりに2つのインデックスに基づいて置き換えられます。

splice: function(specimen, start, end, replacement) { 
    // string to modify, start index, end index, and what to replace that selection with 

    var head = specimen.substring(0,start); 
    var body = specimen.substring(start, end + 1); // +1 to include last character 
    var tail = specimen.substring(end + 1, specimen.length); 

    var result = head + replacement + tail; 

    return result; 
} 
関連する問題