8
votes

Regex non capturant des groupes en JavaScript

Je suis un peu rouillé sur ma regex et ma javascript. J'ai la chaîne suivante var: xxx pré>

je veux extraire 5 code> à l'aide d'une regex. Ceci est mon regex: p> xxx pré>

appliqué comme: p> xxx pré>

Le résultat est le suivant: P>

loadNewsItemWithIndex(5


0 commentaires

3 Réponses :


4
votes

Je crois que la regex suivante devrait fonctionner pour vous:

loadNewsItemWithIndex = exactly that

\( = open parentheses 

([0-9]+) = Capture the number
.* = Anything after that number

$ = end of the line


2 commentaires

Vous étiez correct. Je l'ai ajouté quand je l'ai pensé dans ma tête et je ne l'ai jamais supprimé.


donc . * $ pour la même raison



8
votes

La valeur de retour de string.match est une matrice de correspondances, de sorte que vous pouvez mettre des parenthèses autour de la partie de numéro et que vous récupérez simplement cet index de correspondance particulier (où le premier match est le résultat correspondant complet, et les entrées suivantes sont pour chaque groupe de capture): xxx

code exemple: http: // jsfiddle.net/lt62w/

EDIT: Merci @alan pour la correction sur la manière dont les matchs ne sont pas capturés fonctionnent.

En fait, ça fonctionne parfaitement. Texte qui correspond à l'intérieur d'un le groupe de non-capture est toujours consommé, le même que le texte correspondant en dehors de tout groupe. Un groupe de capture est comme un groupe de non-capture avec une fonctionnalité supplémentaire: en plus du regroupement, cela vous permet de extraire tout ce qu'il correspond indépendamment de la correspondance globale.


3 commentaires

Le match de non-capture ne fonctionne apparemment pas correctement. Je savais qu'il y avait des comportements de regex étranges dans JavaScript, mais cependant que ce problème était un peu rouillé.


En fait, cela fonctionne parfaitement. Le texte qui correspond à l'intérieur d'un groupe non capturant est toujours consommé , de la même manière que le texte correspondant en dehors de tout groupe. Un groupe de capture est comme un groupe non capturant avec une fonctionnalité supplémentaire: en plus du regroupement, il vous permet d'extraire tout ce qu'il correspond indépendamment de la correspondance globale.


... et l'indexation sur le tableau des résultats correspond à des numéros de «groupe» de Regex (qui commencent à 1).



3
votes

Cela devrait suffire:

<script>
var subject = "javascript:loadNewsItemWithIndex(5, null);";
number = subject.match(/[0-9]+/);
alert(number);
</script>


1 commentaires

Meilleure réponse avec le contexte fourni