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'
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);
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);
Juste au cas où quelqu'un d'autre rencontrerait ce fil et serait à la recherche d'une solution JS simple
id.split ('/'). pop (-1)
cette expression rationnelle: [^\/]+$
- fonctionne comme un champion:
var id = ".../base/nabb80191e23b7d9"
result = id.match(/[^\/]+$/)[0];
// results -> "nabb80191e23b7d9"
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:
(?!.*\/).+
Cela devrait fonctionner:
last = id.match(/\/([^/]*)$/)[1];
//=> nabb80191e23b7d9
Je ne sais pas JS, en utilisant d'autres exemples (et une supposition) -
id = id.match(/[^\/]*$/);
// [0] optionnel?
Pourquoi ne pas utiliser remplacer?
"http://google.com/aaa".replace(/(.*\/)*/,"")
donne "aaa"