2010-06-21 5 views
1

Quelqu'un peut-il élaborer/traduire cette expression régulière en anglais?Métacaractères et parenthèses dans les expressions régulières

Merci.

var g = "123456".match(/(.)(.)/); 

J'ai remarqué que la sortie ressemble à ceci:

12,1,2 

et je sais que signifie point tout caractère sauf nouvelle ligne. Mais qu'est-ce que cela fait réellement?

+1

Je ne sais pas, mais ça me rend nerveux et moite! –

Répondre

4

Une paire de parenthèses (sans un? Comme premier caractère, indiquant un autre comportement) capturera le contenu d'un groupe.

Dans votre exemple, le premier élément de la matrice correspond à la totalité de la correspondance et les éléments suivants correspondent aux correspondances de groupe.

Il est peut-être plus clair si votre code était quelque chose comme:

var g = "123456".match(/.(.).(.)./); 

Cela correspondra cinq caractères, plaçant les deuxième et quatrième en groupes 1 et 2 respectivement, de sorte sortie 12345,2,4

Si vous voulez un regroupement pur sans capturer le contenu, utilisez la syntaxe (?:...), la partie ?: indiquant un groupe non-capturant. (Il y a plusieurs choses de groupe variées, comme lookaheads et autres fun stuff.)

Laissez-moi savoir si cela est clair, ou serait une aide supplémentaire d'explication?

+0

Merci pour l'explication. –

1

Il recherche deux caractères - tous les caractères à cause des points - et les 'capture' afin que vous puissiez rechercher la chaîne entière qui a été trouvée, et pour chacune des sous-chaînes (captures).