JavaScript文字列のスラッシュをグローバルに置き換える方法は?


130

JavaScript文字列のスラッシュをグローバルに置き換える方法は?

回答:


256

以下は機能しますが、1つのオカレンスのみを置き換えます。

"string".replace('/', 'ForwardSlash');

グローバル置換の場合、または正規表現を好む場合は、スラッシュをエスケープする必要があります。

"string".replace(/\//g, 'ForwardSlash');

3
最初のスニペットはグローバル置換を行いません。正規表現以外の方法でグローバル置換を行う方法がわからない。
BoltClock

ええと、私はスラッシュ以上でそれを試しませんでした。それはできます"string".replace('/', 'ForwardSlash', 'g')が、Firefoxのafaikでのみ機能する非標準の引数です。
セルデク

1
"string".replace(/\//g, 'ForwardSlash');動作しますが、これから/ gを削除すると動作しません。
johntrepreneur 2013年

1
@johntrepreneur gは、グローバル置換であることを示します/。つまり、matchedのすべてのインスタンスを置換します。gがないと、1つのインスタンスのみが置き換えられます。/g最後の/は終了デリミタなので、削除すると正規表現が完全に壊れます。
セルデク2013年

1
@RameshRajendranこれは、APIのあり方です。デフォルトでは、1回だけ置き換えられ、置き換えるものを見つけたときに停止します。developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Seldaek

27

g修飾子付きの正規表現リテラルを使用し、バックスラッシュでスラッシュをエスケープして、区切り文字と衝突しないようにします。

var str = 'some // slashes', replacement = '';
var replaced = str.replace(/\//g, replacement);

7

正規表現を使用せずに(検索文字列がユーザー入力の場合にのみこれを行います):

var str = 'Hello/ world/ this has two slashes!';
alert(str.split('/').join(',')); // alerts 'Hello, world, this has two slashes!' 


4

これは"//"ちょうど私に変わるのに私のために働きました"/"

str.replace(/\/\//g, '/');

2

ブラウザ間の問題や//コメントアウトを回避するには、スラッシュをラップする必要があります。

str = 'this/that and/if';

var newstr = str.replace(/[/]/g, 'ForwardSlash');

1

こんにちは、上記のスクリプトの小さな修正です。出力を表示するときに最初の文字をスキップする上記のスクリプト。

function stripSlashes(x)
{
var y = "";
for(i = 0; i < x.length; i++)
{
    if(x.charAt(i) == "/")
    {
        y += "";
    }
    else
    {
        y+= x.charAt(i);
    }
}
return y;   
}

0
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);)はコメント化されています。


1
このパフォーマンスが、提案された配列の分割/結合ソリューションとどのように比較されるかはわかりません。
クリストファーリンカーン

...つまずきました...よりスマートな構文強調表示を使用して別のIDEを試してください。コードエディターの色に依存せず、実行時にコードを適切にトークン化するステートフルパーサーの力を信じてください。
soletan

0

これはクリストファーリンカーンズのアイデアですが、正しいコードを使用しています。

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;
}

-1

RegExpオブジェクトを作成して、もう少し読みやすくすることができます

str.replace(new RegExp('/'), 'foobar');

それらすべてを置き換える場合は、"g"フラグを追加します

str.replace(new RegExp('/', 'g'), 'foobar');
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.