web-dev-qa-db-ja.com

スラッシュをエスケープしたJavaScript正規表現は置き換えられません

スラッシュを正規表現に含めるときにエスケープする必要がありますか?

myString = '/courses/test/user';
myString.replace(/\/courses\/([^\/]*)\/.*/, "$1");
document.write(myString);

「テスト」を印刷する代わりに、ソース文字列全体を印刷します。

このデモをご覧ください:

http://jsbin.com/esaro3/2/edit

33
Radek Simko

JavaScriptはスラッシュを使用して正規表現を示すため、正規表現は完璧です。もちろん、スラッシュをエスケープする必要があります。

ただし、問題はJavaScriptのreplaceメソッドがインプレース置換を実行しないことです。つまり、実際に文字列を変更するのではなく、単に置換の結果を提供するだけです。

これを試して:

myString = '/courses/test/user';
myString = myString.replace(/\/courses\/([^\/]*)\/.*/, "$1");
document.write(myString);

これにより、myStringが置き換えられた値に設定されます。

43
Reid

/[\/]/gはスラッシュに一致します。
/[\\]/gは、バックスラッシュに一致します。

12
rajesh_kw

string.replaceは元の文字列を変更しません。代わりに、置換が実行された新しい文字列を返します。

試してください:

myString = '/courses/test/user';
document.write(myString.replace(/\/courses\/([^\/]*)\/.*/, "$1"));
9
Anon.

実際、例の一部のように文字クラス内にある場合は、スラッシュをエスケープする必要はありません(つまり、[^\/]*[^/]*のように問題ありません)。文字クラスの外にある場合(\/coursesなどの他の例のように)、スラッシュをエスケープする必要があります。

9
Brett Zamir