スラッシュを正規表現に含めるときにエスケープする必要がありますか?
myString = '/courses/test/user';
myString.replace(/\/courses\/([^\/]*)\/.*/, "$1");
document.write(myString);
「テスト」を印刷する代わりに、ソース文字列全体を印刷します。
このデモをご覧ください:
JavaScriptはスラッシュを使用して正規表現を示すため、正規表現は完璧です。もちろん、スラッシュをエスケープする必要があります。
ただし、問題はJavaScriptのreplace
メソッドがインプレース置換を実行しないことです。つまり、実際に文字列を変更するのではなく、単に置換の結果を提供するだけです。
これを試して:
myString = '/courses/test/user';
myString = myString.replace(/\/courses\/([^\/]*)\/.*/, "$1");
document.write(myString);
これにより、myString
が置き換えられた値に設定されます。
/[\/]/g
はスラッシュに一致します。/[\\]/g
は、バックスラッシュに一致します。
string.replace
は元の文字列を変更しません。代わりに、置換が実行された新しい文字列を返します。
試してください:
myString = '/courses/test/user';
document.write(myString.replace(/\/courses\/([^\/]*)\/.*/, "$1"));
実際、例の一部のように文字クラス内にある場合は、スラッシュをエスケープする必要はありません(つまり、[^\/]*
は[^/]*
のように問題ありません)。文字クラスの外にある場合(\/courses
などの他の例のように)、スラッシュをエスケープする必要があります。