2012-10-16 1 views
1

Je manque d'expérience avec regex et j'ai besoin d'aide. Je dois extraire un tag git. La chaîne d'entrée est comme ceci:Besoin d'aide pour améliorer une regex

6dde3d91f23bff5ab81e91838f19f306b33fe7a8refs/tags/3.4.2 

// there is a new line at the end of the string 

La partie de la chaîne que j'ai besoin 3.4.2. Voici mon code:

var pattern = /.*([0-9]{1}\.{1}[0-9]{1}\.{1}[0-9]{1}).*/ig; 
var match = pattern.exec(string); 
// match[1] gets what I need 

Il fonctionne, mais ce regex est ridiculement longue, il doit y avoir un moyen de le rendre plus court. Quelqu'un peut-il m'aider?

Merci

+0

Pourriez-vous préciser le modèle que vous devez faire correspondre? Ou bien une simple séparation serait parfaite. – Christophe

+0

Je pense toujours que '/ [0-9.] + $ /' Est le meilleur motif, car il prend également en compte '1.0' et' 1.0.100', par exemple. –

+0

@RobW dans ce cas, il pourrait être /\d+(\.\d+)?(\.\d+)?$/ – Christophe

Répondre

3

Vous pouvez remplacer [0-9]{1} avec \d comme suit:

/\d\.\d\.\d$/ 

Le $ correspond à la fin de la ligne.

Modifier: mise à jour en fonction des commentaires de Rob-W

+3

'. *' N'est pas nécessaire dans l'expression. Supprimez également les parenthèses et accédez au résultat via 'match [0]'. –

+0

Merci à vous deux, c'est parfait. – romainberger

1

Pas regex est nécessaire, juste diviser la chaîne.

var tag ="6dde3d91f23bff5ab81e91838f19f306b33fe7a8refs/tags/3.4.2";​​​​​ 
console.log(tag.split('/')[2]);​ // results in 3.4.2 
+1

Ce serait génial, mais je veux être sûr que le match je respecte le modèle que je cherche . Avec ceci je viens d'obtenir la dernière partie, cela pourrait être n'importe quoi – romainberger

0

Le {1} est implicite dans chaque déclaration. En les sortant, cela raccourcira votre expression.

j08691's answer est la bonne chose, cependant: juste la chaîne le diviser.

0

j'ai obtenu votre résultat avec \d\..*

ne peut pas obtenir une plus courte que cela.

test, il here

+0

@ NullUserException ♦: non. il existe une [norme pour le marquage] (http://git-scm.com/book/fr/Git-Basics-Tagging). – RASG

+0

Assez juste; bien que je ne vois pas de format "standard" sur cette page. – NullUserException

0

C'est un Shortest >>

[0-9.] + $