Haha, commençons par quelques mots. L'année dernière, j'ai utilisé C# pour créer un outil de coloration syntaxique. Il a formaté le code donné en HTML en fonction des informations contenues dans le fichier de configuration, afin qu'il puisse afficher la même syntaxe sur la page Web. dans l'éditeur. Effet de mise en évidence des éléments et prise en charge du pliage de code. C'est vrai, c'est similaire à ce que vous avez vu sur le blog. Comme j'utilisais MSN Space à l'époque, il ne fournissait pas cette fonction, j'ai donc dû en écrire une moi-même.
J'ai utilisé C# pour écrire. Au début, j'utilisais des instructions de base très lourdes telles que for, while, switch, if, etc. pour juger les mots-clés, etc. Ne vous moquez pas de moi, j'étais stupide et je ne savais pas ce que c'était. L'expression régulière l'était à l'époque, donc je ne peux utiliser que cette méthode brute. Bien sûr, la méthode brute est toujours efficace. Ce n'est qu'un long code dans une fonction. Ce sera très difficile à maintenir. d'autres logiciels ne peuvent pas être écrits comme ça, alors... Après avoir cherché sur Google pendant un moment, j'ai trouvé du code et des projets open source avec coloration syntaxique, et j'ai commencé à y jeter un œil. . . . . Wow, tout est si compliqué. Pour être honnête, ce que je n'aime pas faire le plus, c'est regarder le code des autres. Je ne suis pas prétentieux, mais c'est vraiment déroutant de regarder le code des autres. une description très détaillée du document, sinon je ne veux pas le regarder au premier coup d'œil. Tout au plus, je regarde simplement comment les autres écrivent l'interface, puis je devine comment elle est implémentée en interne.
Bien que la recherche n'ait pas été très utile, elle m'a quand même fait connaître les expressions régulières. J'ai oublié où je l'avais vue. A cette époque, j'ai commencé à étudier les expressions régulières tout en améliorant mes "trucs cassés". Peu de temps après, j'ai recommencé à bloguer dans Blog Park et j'ai finalement activé la fonction de coloration syntaxique de Blog Park. J'ai donc perdu une motivation majeure pour écrire mon propre code pour mettre en évidence le HTML. Deuxièmement, le module de coloration syntaxique réalisé en C# ne peut s'exécuter que côté serveur ou programme WinForm, et ce que je souhaite finalement obtenir, c'est du code HTML à afficher sur la page. Je pense que les scripts côté client sont les plus adaptés à ce travail. C'est dommage que je ne connaisse pas grand-chose à JS. . . Plus tard, j'ai commencé à jouer avec d'autres choses pendant cette période et je n'ai pas amélioré le module de coloration syntaxique.
J'ai fait des heures supplémentaires hier soir et je suis rentré à la maison. Au départ, j'avais prévu de continuer à apprendre UML et de voir les modèles. Ensuite, je me suis souvenu que l'entreprise avait un module qui devait supprimer toutes les balises HTML dans les résultats renvoyés par la base de données, j'ai donc ouvert le module régulier. outil d'expression RegexBuddy. En conséquence, j'ai vu un didacticiel simple sur l'utilisation des expressions régulières dans JScript dans le document d'aide de RegexBuddy, donc ma curiosité est revenue, j'ai donc ouvert UltraEdit-32 et commencé à écrire du JavaScript simple pour expérimenter.
Je ne reviens pas ici sur les détails de mon processus de test, car de nombreux endroits impliquent des tests répétés et de nombreux détours. Ici, je vais donner directement l'utilisation des expressions régulières dans JScript que j'ai résumées à partir des tests.
Assez de bêtises, rentrons dans le vif du sujet !
Le Premier ministre parle de l'objet d'expression régulière de JScript, RegExp.
Le nom de classe qui fournit des opérations d'expression régulière dans JScript est RegExp, et les objets de type RegExp peuvent être instanciés de deux manières.
Méthode 1, instanciation du constructeur :
var myRegex = new RegExp(" \w +", "igm ");
//w+ est l'expression régulière réelle. Notez que le premier est destiné à l'échappement. igm signifie respectivement ignorer la casse, la recherche globale et la recherche multiligne.
Deuxième méthode, méthode d'affectation directe :
var myRegex = /w+/igm;
// L'effet est le même que l'instruction précédente, sauf qu'il n'est pas nécessaire d'utiliser des caractères de transfert ici. L'expression régulière originale telle qu'elle ressemble a le même effet que l'igm de l'exemple précédent.
La méthode spécifique utilisée dépend des préférences de chacun. Personnellement, je pense que la deuxième méthode est plus facile à lire lors de l'écriture de regex. Le document d'aide de RegexBuddy recommande également la deuxième méthode. L'objet RegExp comprend les opérations suivantes :
exec(string str) : effectue une correspondance d'expression régulière et renvoie les résultats correspondants. Selon l'exemple de résultats d'exécution donné par MSDN, chaque exécution de exec commence à la fin de la dernière correspondance directe. la valeur renvoyée semble être un objet RerExp, et l'explication donnée par RegexBuddy est de renvoyer un tableau, mais aucun exemple détaillé n'est donné, je pense qu'il est plus fiable sur la base des résultats expérimentaux.
compile(string regex, string flags) : précompilez les expressions régulières pour les rendre plus rapides. Après les tests, l'efficacité est considérablement améliorée après la pré-compilation. Le paramètre regex est une expression régulière et les indicateurs peuvent être une combinaison des trois valeurs suivantes : g – recherche globale est que sans ajouter l'indicateur g, il ne peut correspondre qu'à la première chaîne qualifiée i – en ignorant la casse m. – La recherche multiligne semble être une recherche multiligne par défaut
test(string str) : si str correspond à l'expression régulière, elle renvoie vrai, sinon elle renvoie faux. Cette méthode de correspondance similaire à l'objet chaîne
RegExp contient les attributs suivants
.:
index : dans la chaîne La position de la première expression correspondante, initialement -1
input : la cible correspondante de l'expression régulière, notez qu'elle est en lecture seule
lastIndex : La position de l'expression correspondante suivante. Le mot original est (Renvoie la position du caractère où commence la prochaine correspondance dans une chaîne recherchée.) Je ne sais pas s'il y a une erreur de traduction, je n'ai pas utilisé cet attribut.
lastMatch : la dernière chaîne correspondant à l'expression
lastParen : la dernière chaîne de sous-correspondance correspondante. Par exemple, s'il existe plusieurs correspondances regroupées par () dans une expression régulière, lastParen représente le dernier groupe de résultats correspondants.
leftContext : tous les caractères depuis le début de la chaîne cible jusqu'à la position de départ de la dernière correspondance.
rightContext : tous les caractères depuis la fin de la dernière correspondance jusqu'à la fin de la chaîne cible entière.
$1...$9 : indique le résultat du nième groupe de correspondances. Ceci est utile lorsqu'il y a plusieurs groupes () dans l'expression régulière.
Parlons ensuite des opérations liées à l'objet String et aux expressions régulières dans JScript :
match. (string regex) : accepte une expression régulière et renvoie si la chaîne correspond à l'expression.
replace(srting regex, string str) : remplacez la sous-chaîne correspondant à l'expression régulière par str. Cette fonction semble simple, mais elle cache également une utilisation plus avancée.
Exemple 1 :
var str1 = "A:Je m'appelle Peter !nB:Salut Peter!";
str1 = str1.replace(/Peter/g,"Jack");
alerte(str1);
Cet exemple est aussi simple que remplacer une chaîne. La puissance de cette expression ne se limite bien sûr pas à cela. Si vous êtes habile à l'utiliser, vous pouvez également l'utiliser pour effectuer de nombreuses tâches qui nécessitaient auparavant beaucoup de code. Par exemple, ajoutez des balises HTML en surbrillance avant et après les mots-clés de code. D'après l'exemple précédent, il semble que replace ne puisse remplacer que le texte correspondant par du nouveau texte. Comment puis-je l'utiliser pour insérer des balises avant et après des mots-clés ? En y repensant, si vous pouvez utiliser les résultats correspondants lors du remplacement, les choses seront alors plus faciles. Remplacez simplement les mots-clés par : en-tête de balise + mot-clé + queue de balise.
Mais comment utiliser les résultats de la correspondance d’expressions régulières en remplacement ?
À l'heure actuelle, nous devons utiliser des « variables correspondantes ». Les variables correspondantes sont utilisées pour représenter les résultats de la correspondance régulière. Voici une description des variables correspondantes :
$& -- représente les résultats de correspondance de tous les groupes correspondants. Enfin, le groupe correspondant est le groupe () de l'expression régulière.
$$ -- représente le caractère $ Étant donné que la variable correspondante utilise le caractère $, elle doit être échappée.
$n -- similaire au précédent $1...$9, indiquant le nième ensemble de résultats correspondants
$nn -- très simplement le résultat du nième groupe de matchs
$` -- est le leftContext mentionné précédemment. Par exemple, si abcdefg correspond à d, alors abc est son leftContext.
$' -- C'est très proche de ce qui précède, ne vous méprenez pas ! , c'est le rightContext. Par analogie, efg est le rightContext de l'exemple ci-dessus. Il nous est donc désormais très simple d'insérer des balises avant et après les mots-clés :
var str1 = "A:My name is Peter!nB:Hi. Pierre!" ;
str1 = str1.replace(/Peter/g, "<b>$&</b>");
alerte(str1);
Il est déjà 0h39. . . Arrêtons-nous ici.
Téléchargement régulier du logiciel d'outil (mot de passe : regex) : regex buddy 2.06.zip
Veuillez consulter l'exemple que j'ai écrit : coloration syntaxique JScript (simplification du code)
Voici quelques exemples tirés de MSDN :
function matchDemo()
{
Vars;
var re = new RegExp("d(b+)(d)","ig");
var str = "cdbBdbsbdbdz";
var arr = re.exec(str);
s = "$1 contient : " + RegExp.$1 + "n" ;
s += "$2 contient : " + RegExp.$2 + "n" ;
s += "$3 contient : " + RegExp.$3;
retour(s);
}
fonction RegExpTest()
{
var ver = Nombre (ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
si (ver >= 5.5){
var src = "La pluie en Espagne tombe principalement dans la plaine.";
var re = /w+/g;
vararr;
while ((arr = re.exec(src)) != null)
print(arr.index + "-" + arr.lastIndex + "t" + arr);
}
autre{
alert("Vous avez besoin d'une version plus récente de JScript pour que cela fonctionne");
}
}
fonction matchDemo()
{
var s; //Déclare la variable.
var re = new RegExp("d(b+)(d)","ig"); //Modèle d'expression régulière.
var str = "cdbBdbsbdbdz"; //Chaîne à rechercher.
var arr = re.exec(str); //Effectuer la recherche.
s = "$1 renvoie : " + RegExp.$1 + "n" ;
s += "$2 renvoie : " + RegExp.$2 + "n" ;
s += "$3 renvoie : " + RegExp.$3 + "n" ;
s += "l'entrée renvoie : " + RegExp.input + "n";
s += "lastMatch renvoie : " + RegExp.lastMatch + "n" ;
s += "leftContext renvoie : " + RegExp.leftContext + "n" ;
s += "rightContext renvoie : " + RegExp.rightContext + "n" ;
s += "lastParen renvoie : " + RegExp.lastParen + "n" ;
return(s); //Renvoyer les résultats.
}
document.write(matchDemo());
Si des héros de passage ont des opinions sur cet article, n'hésitez pas à les publier ici. Apprenons et progressons ensemble.