回答:
以下は機能しますが、1つのオカレンスのみを置き換えます。
"string".replace('/', 'ForwardSlash');
グローバル置換の場合、または正規表現を好む場合は、スラッシュをエスケープする必要があります。
"string".replace(/\//g, 'ForwardSlash');
"string".replace('/', 'ForwardSlash', 'g')が、Firefoxのafaikでのみ機能する非標準の引数です。
"string".replace(/\//g, 'ForwardSlash');動作しますが、これから/ gを削除すると動作しません。
/。つまり、matchedのすべてのインスタンスを置換します。gがないと、1つのインスタンスのみが置き換えられます。/g最後の/は終了デリミタなので、削除すると正規表現が完全に壊れます。
var str = '/questions'; // input: "/questions"
while(str.indexOf('/') != -1){
str = str.replace('/', 'http://stackoverflow.com/');
}
alert(str); // output: "http://stackoverflow.com/questions"
提案された正規表現/\//gは私にはうまくいきませんでした。行の残りの部分(//g, replacement);)はコメント化されています。
これはクリストファーリンカーンズのアイデアですが、正しいコードを使用しています。
function replace(str,find,replace){
if (find != ""){
str = str.toString();
var aStr = str.split(find);
for(var i = 0; i < aStr.length; i++) {
if (i > 0){
str = str + replace + aStr[i];
}else{
str = aStr[i];
}
}
}
return str;
}
使用例:
var somevariable = replace('//\\\/\/sdfas/\/\/\\\////','\/sdf','replacethis\');
JavaScriptのグローバル文字列置換は、不必要に複雑です。この関数はその問題を解決します。パフォーマンスへの影響はおそらくわずかですが、無視できると思います。
代わりの関数はこちらですが、見た目はすっきりしていますが、上記の関数よりも平均で約25〜20 %遅くなります。
function replace(str,find,replace){
if (find !== ""){
str = str.toString().split(find).join(replace);
}
return str;
}