Je n'utiliserais pas d'expressions régulières pour cela (bien que vous le puissiez certainement); Je diviserais la chaîne sur ::
, puisque c'est conceptuellement ce que vous voulez faire.
function lastToken(str) {
var xs = str.split('::');
return xs.length > 1 ? xs.pop() : null;
}
Si vous voulez vraiment juste une expression régulière, vous pouvez utiliser /::((?:[^:]|:(?!:))*)$/
. Tout d'abord, il correspond à un littéral ::
. Ensuite, nous utilisons des parenthèses pour mettre la chose désirée dans la capture du groupe 1. La chose désirée est une ou plusieurs copies d'une chaîne -bracketed (?:...)
; ce groupe de bracketing sans capture. Nous recherchons ensuite soit [^:]
, un caractère non-deux-points, soit :(?!:)
, un deux-points suivi d'un non-deux-points. Le (?!...)
est un lookahead négatif, qui ne correspond que si le jeton suivant ne correspond pas au motif contenu. Depuis JavaScript ne supporte pas les négatifs d'assertions arrières, je ne vois pas un bon moyen d'éviter de capturer le ::
aussi bien, mais vous pouvez envelopper ceci en fonction:
function lastTokenRegex(str) {
var m = str.match(/::((?:[^:]|:(?!:))*)$/);
return m && m[1];
}
comme séparateur, je veux avoir tout ce qui suit la dernière section '::', pourrait être qu'après le '::' j'ai un autre type de symbole, nombre, etc. – jpabluz
Le dernier jeton peut-il contenir ':'? Si oui, peut-il être 'foo ::: bar', et comment allez-vous le gérer? – Kobi