Sélectionnez le caractère '|' à sélectionner parmi deux ou plusieurs candidats. En étendant l'expression régulière du titre du chapitre, il peut être étendu à une expression qui s'applique plus que simplement au titre du chapitre. Cependant, ce n'est pas aussi direct que prévu. Lors de l'utilisation de la sélection, l'expression la plus probable pour chaque côté du caractère '|' sera appariée. Vous pourriez penser que les expressions JScript et VBScript suivantes correspondront au «chapitre» ou à la «section» aux positions de début et de fin d'une ligne et suivies d'un ou deux chiffres:
/^Chapter|Section [1-9][0-9]{0,1}$/ ^Chapter|Section [1-9][0-9]{0,1}___FCKpd___0quot;Malheureusement, le vrai cas est que l'expression régulière illustrée ci-dessus correspond au mot «chapitre» au début d'une ligne ou correspond à la «section» à la fin d'une ligne suivie d'un nombre. Si la chaîne d'entrée est «Chapitre 22», l'expression ci-dessus ne correspondra qu'au mot «chapitre». Si la chaîne d'entrée est «section 22», l'expression correspondra à la «section 22». Mais ce résultat n'est pas notre objectif ici, donc il doit y avoir un moyen de rendre les expressions régulières plus réactives à ce qu'ils vont faire, et il y a en effet un tel moyen.
Les parenthèses peuvent être utilisées pour limiter la plage de choix, c'est-à-dire qu'il est clair que le choix ne s'applique qu'aux deux mots «chapitre» et «section». Cependant, les parenthèses sont également difficiles à gérer car elles sont également utilisées pour créer des sous-expressions, et certaines seront introduites ultérieurement dans la section sur les sous-expressions. En prenant l'expression régulière indiquée ci-dessus et en ajoutant des parenthèses à l'emplacement approprié, l'expression régulière peut être faite pour correspondre à la fois «chapitre 1» et «section 3».
L'expression régulière suivante utilise des parenthèses pour regrouper «chapitre» et «section» afin que l'expression fonctionne correctement. Pour jscript:
/^(Chapter|Section) [1-9][0-9]{0,1}$/Pour VBScript:
^(Chapter|Section) [1-9][0-9]{0,1}___FCKpd___2quot;Ces expressions fonctionnent correctement et produisent simplement un sous-produit intéressant. Placer des parenthèses des deux côtés du «chapitre | Section» crée un regroupement approprié, mais fait également correspondre l'un des deux mots pour être capturé pour une utilisation future. Puisqu'il n'y a qu'un seul ensemble de parenthèses dans l'expression indiquée ci-dessus, il ne peut y avoir qu'un seul Submatch capturé. Ce submatch peut être référencé à l'aide de la collection Submatches de VBScript ou des attributs de 1 $ à 9 $ de l'objet regexp dans JScript.
Parfois, la capture d'un sous-match est souhaitable, parfois indésirable. Dans l'exemple indiqué dans la description, ce que vous voulez vraiment faire est d'utiliser des parenthèses pour regrouper le choix entre les mots «chapitre» ou «section». Il n'est pas souhaitable de se référer au match plus tard. En fait, veuillez ne pas utiliser à moins que vous n'ayez vraiment besoin de capturer un sous-match. Cette expression régulière sera plus efficace car elle ne nécessite pas de temps et de mémoire pour stocker ces sous-matchs.
Vous pouvez utiliser '?: «Devant les parenthèses du modèle d'expression régulières pour empêcher le stockage de cette correspondance pour une utilisation future. Les modifications suivantes à l'expression régulière illustrée ci-dessus fournissent les mêmes fonctionnalités qui éliminent le stockage du submm. Pour jscript:
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/Pour VBScript:
^(?:Chapter|Section) [1-9][0-9]{0,1}___FCKpd___4quot;En plus des '?:' Metacharacter, il y a deux métacharacteurs non capturiques utilisés pour les matchs appelés pré-téléchèmes . Un pré-vérification avant est représenté par? =, Où le modèle d'expression régulière entre parenthèses commence à correspondre à la chaîne de recherche. Une pré-vérification négative est indiquée par '?!
Par exemple, supposons qu'il existe un document qui contient des références à Windows 3.1, Windows 95, Windows 98 et Windows NT. En supposant en outre que le document doit être mis à jour en recherchant toutes les références à Windows 95, Windows 98 et Windows NT et en modifiant ces références à Windows 2000. Vous pouvez utiliser l'expression régulière JScript suivante, qui est un pré-vérification avant pour correspondre à Windows 95, Windows 98 et Windows NT:
/Windows(?=95 |98 |NT )/ Pour faire la même correspondance dans VBScript, vous pouvez utiliser l'expression suivante: Windows(?=95 |98 |NT )
Une fois une correspondance trouvée, la recherche de match suivante commence immédiatement après le texte correspondant (sans compter les caractères utilisés dans le pré-examen). Par exemple, si l'expression indiquée ci-dessus correspond à «Windows 98», la recherche continuera à partir de «Windows» au lieu de «98».
L'une des caractéristiques les plus importantes des expressions régulières est la possibilité de stocker une partie du modèle réussi à succès pour une utilisation ultérieure. Rappelons que l'ajout de parenthèses aux deux côtés d'un modèle d'expression régulière ou d'un modèle partiel entraînera un stockage d'expression partielle dans un tampon temporaire. Les Metacharacters non capturés '?:', '? =', Ou '?!' Peuvent être utilisés pour ignorer le stockage de cette partie de l'expression régulière.
Chaque Submatch capturé est stocké comme le contenu rencontré de gauche à droite dans le modèle d'expression régulière. Le nombre de tampons qui stocke les sous-matchs commence à 1 et est numéroté consécutivement jusqu'à la 99 sous-expressions maximale. Chaque tampon est accessible à l'aide de '/ n ', où N est un numéro décimal à un ou à deux chiffres qui identifie un tampon particulier.
Citation arriérée L'une des applications les plus faciles et les plus utiles est la capacité de déterminer où deux mots identiques apparaissent successivement dans un texte. Veuillez consulter la phrase suivante:
Is is the cost of of gasoline going up up?Selon le contenu écrit, la phrase ci-dessus a évidemment le problème des mots répétés à plusieurs reprises. Ce serait formidable s'il y avait un moyen de modifier la phrase sans rechercher la répétition de chaque mot. L'expression régulière JScript suivante peut atteindre cette fonction en utilisant une sous-expression.
//b([az]+) /1/b/giL'expression de VBScript équivalente est:
/b([az]+) /1/bDans cet exemple, la sous-expression est chaque élément entre parenthèses. L'expression capturée comprend un ou plusieurs caractères alphabétiques, c'est-à-dire spécifié par «[az] +». La deuxième partie de l'expression régulière est une référence au sous-match précédemment capturé, c'est-à-dire la deuxième occurrence du mot correspondant à l'expression supplémentaire. «/ 1» est utilisé pour spécifier le premier submmatch. Les caractères de l'élément limite des mots garantissent que seuls les mots individuels sont détectés. Sinon, les phrases telles qu'elles sont publiées ou cela sera mal reconnu par l'expression.
Dans une expression JScript, le drapeau global ('g') suivant l'expression régulière signifie que l'expression sera utilisée pour trouver autant de correspondances que possible dans la chaîne d'entrée. La sensibilité de la caisse est spécifiée par le mark de sensibilité à la caisse («i») à la fin de l'expression. Les balises multi-lignes spécifient des correspondances potentielles qui peuvent apparaître aux deux extrémités d'un caractère Newline. Pour VBScript, diverses balises ne peuvent pas être définies dans des expressions, mais elles doivent être explicitement définies en utilisant les propriétés de l'objet regexp .
En utilisant l'expression régulière indiquée ci-dessus, le code JScript suivant peut remplacer le même mot qui apparaît deux fois dans une chaîne littérale par le même mot en utilisant des informations de sous-costume:
. var rv = ss.replace(re,$1); //var ss = Is is the cost of of gasoline going up up?./n; var re = //b([az]+) /1/b/gim; //. var rv = ss.replace(re,$1); //remplace deux mots par un mot.
Le code VBScript équivalent le plus proche est le suivant:
Dim ss, re, rv ss = Is is the cost of of gasoline going up up?. & vbNewLine Set re = New RegExp re.Pattern = /b([az]+) /1/b re.Global = True re.IgnoreCase = True re.MultiLine = True rv = re.Replace(ss,$1)Notez que dans le code VBScript, Global, Case Sensitivité et les balises multi-lignes sont définies à l'aide de propriétés appropriées de l'objet Regexp .
Utilisez 1 $ dans la méthode de remplacement pour référencer le premier Submatch enregistré. S'il y a plusieurs sous-matchs, vous pouvez continuer à référencer avec 2 $ , 3 $, etc.
Une autre utilisation des références vers l'arrière consiste à briser un indicateur de ressources commun (URI) en composants. Supposons que vous souhaitiez décomposer l'URI suivant en protocoles (FTP, HTTP, etc.), l'adresse de nom de domaine et la page / Path:
http://msdn.microsoft.com:80/scripting/default.htmLes expressions régulières suivantes peuvent fournir cette fonction. Pour jscript, comme:
/(/w+):////([^/:]+)(:/d*)?([^# ]*)/Pour VBScript:
(/w+):////([^/:]+)(:/d*)?([^# ]*)La première sous-expression supplémentaire est utilisée pour capturer la partie protocole de l'adresse Web. Cette sous-expression correspond à tout mot situé devant un côlon et deux coups de barre vers l'avant. La deuxième sous-expression supplémentaire capture l'adresse du nom de domaine de cette adresse. Cette sous-expression correspond à n'importe quelle séquence de caractères qui n'inclut pas les caractères '^', '/' ou ':'. La troisième sous-expression supplémentaire capture le numéro de port du site Web si le numéro de port est spécifié. Cette sous-expression correspond à zéro ou plus de nombres suivis d'un côlon. Enfin, la quatrième sous-expression supplémentaire capture le chemin spécifié par l'adresse Web et / ou les informations de page. Cette sous-expression correspond à un et à plusieurs caractères sauf «#» ou espace.
Après avoir appliqué cette expression régulière à l'URI indiqué ci-dessus, le sous-match contient les éléments suivants:
Regexp. 1 $ contient http
Regexp. 2 $ contient msdn.microsoft.com
Regexp. 3 $ Comprend: 80
Regexp. 4 $ contient / scripting/default.htm