web-dev-qa-db-fra.com

RegEx - Obtenir tous les caractères après la dernière barre oblique dans l'URL

Je travaille avec une API Google qui renvoie les identifiants au format ci-dessous, que j'ai enregistrés sous forme de chaîne. Comment puis-je écrire une expression régulière en javascript pour couper la chaîne uniquement aux caractères après la dernière barre oblique de l'URL.

var id = 'http://www.google.com/m8/feeds/contacts/myemail%40gmail.com/base/nabb80191e23b7d9'
33
ac360

N'écris pas de regex! C’est trivial à faire à la place avec des fonctions de chaîne:

var final = id.substr(id.lastIndexOf('/') + 1);

C'est encore plus facile si vous savez que la dernière partie sera toujours composée de 16 caractères:

var final = id.substr(-16);
73
lonesomeday

Une approche regex légèrement différente:

var afterSlashChars = id.match(/\/([^\/]+)\/?$/)[1];

Décomposer cette regex:

\/ match a slash
(  start of a captured group within the match
[^\/] match a non-slash character
+ match one of more of the non-slash characters
)  end of the captured group
\/? allow one optional / at the end of the string
$  match to the end of the string

Le [1] récupère ensuite le premier groupe capturé dans la correspondance.

Extrait de travail:

var id = 'http://www.google.com/m8/feeds/contacts/myemail%40gmail.com/base/nabb80191e23b7d9';

var afterSlashChars = id.match(/\/([^\/]+)\/?$/)[1];

// display result
document.write(afterSlashChars);

34
jfriend00

Juste au cas où quelqu'un d'autre rencontrerait ce fil et serait à la recherche d'une solution JS simple

id.split ('/'). pop (-1)

12
ramumb

cette expression rationnelle: [^\/]+$ - fonctionne comme un champion:

var id = ".../base/nabb80191e23b7d9"

result = id.match(/[^\/]+$/)[0];

// results -> "nabb80191e23b7d9"
9
Andy

c'est facile à comprendre (?!.*/).+

laisse-moi expliquer:

premièrement, permet de faire correspondre tout ce qui a une barre oblique à la fin, ok? c'est la partie que nous ne voulons pas

.*/ correspond à tout jusqu'à la dernière barre oblique

ensuite, nous faisons un "lookahead négatif" (?!) pour dire "je ne veux pas de ça, jette-le"

(?!.*) c'est "lookahead négatif"

Maintenant, nous pouvons prendre avec plaisir tout ce qui est à côté de ce que nous ne voulons pas avec ceci .+ 

VOUS DEVEZ BESOIN D'ÉCHAPPER LE/SO IL DEVIENT:

(?!.*\/).+ 

9
lalo

Cela devrait fonctionner:

last = id.match(/\/([^/]*)$/)[1];
//=> nabb80191e23b7d9
9
anubhava

Je ne sais pas JS, en utilisant d'autres exemples (et une supposition) - 

id = id.match(/[^\/]*$/); // [0] optionnel?

7
sln

Pourquoi ne pas utiliser remplacer?

"http://google.com/aaa".replace(/(.*\/)*/,"")

donne "aaa"

0
Nimrod