Dois-je échapper les barres obliques lors de leur expression régulière?
myString = '/courses/test/user';
myString.replace(/\/courses\/([^\/]*)\/.*/, "$1");
document.write(myString);
Au lieu d'imprimer "test", il imprime la chaîne source entière.
Voir cette démo:
Votre expression régulière est parfaite, et oui, vous devez échapper aux barres obliques car JavaScript utilise les barres obliques pour indiquer les expressions rationnelles.
Cependant, le problème est que la méthode replace
de JavaScript n'effectue pas de remplacement sur place. Autrement dit, il ne change pas réellement la chaîne - il vous donne juste le résultat du remplacement.
Essaye ça:
myString = '/courses/test/user';
myString = myString.replace(/\/courses\/([^\/]*)\/.*/, "$1");
document.write(myString);
Cela définit myString
sur la valeur remplacée.
/[\/]/g
correspond aux barres obliques./[\\]/g
correspond à des barres obliques inverses.
string.replace
ne modifie pas la chaîne d'origine. A la place, a renvoie une nouvelle chaîne dont le remplacement a été effectué.
Essayer:
myString = '/courses/test/user';
document.write(myString.replace(/\/courses\/([^\/]*)\/.*/, "$1"));
En fait, vous n'avez pas besoin d'échapper à la barre oblique lorsque vous êtes dans une classe de caractères comme dans une partie de votre exemple (c'est-à-dire [^\/]*
c'est bien comme juste [^/]*
). S'il est en dehors d'une classe de caractères (comme avec le reste de votre exemple tel que \/courses
), vous devez alors échapper aux barres obliques.