Extraction de texte multiligne avec des expressions régulières en JavaScript
En HTML, il est souvent nécessaire d'extraire des informations à l'intérieur des balises. Une méthode pour y parvenir consiste à utiliser des expressions régulières. Cependant, l'indicateur multiligne de JavaScript (/m/) peut ne pas toujours fonctionner comme prévu.
Considérez l'expression régulière suivante, qui vise à extraire le texte entre les balises h1 dans une chaîne HTML :
var pattern= /<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/mi m = html.search(pattern); return m[1];
Si cette expression régulière rencontre des nouvelles lignes (n) dans la chaîne, elle peut renvoyer null. La suppression des nouvelles lignes résout ce problème, suggérant que l'indicateur /m/ ne se comporte pas comme prévu.
La solution : le modificateur /s/ (Dotall)
Le L'indicateur /m/ modifie le comportement des caractères ^ et $, pas du . Le problème vient donc du . personnage. JavaScript ne fournit pas le modificateur /.../s (également connu sous le nom de modificateur dotall).
Solution de contournement
Pour atténuer ce problème, les développeurs JavaScript peuvent utiliser un caractère classe (par exemple, s) et sa négation (S) ensemble, như sau :
[\s\S]
L'incorporation de ceci dans l'expression régulière d'origine donne ce qui suit :
/<div class="box-content-5">[\s\S]*<h1>([^<]+?)<\/h1>/i
Cette expression devrait réussir à extraire le texte souhaité à partir de la chaîne HTML, même en présence de nouvelles lignes.
Mise à jour ES2018
Depuis ES2018, JavaScript a introduit le drapeau s (dotAll), qui permet le . pour correspondre aux nouvelles lignes. Cela élimine le besoin de solutions de contournement. L'expression régulière mise à jour ressemblerait à ceci :
/<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/is
Cette modification garantit la compatibilité avec les environnements JavaScript modernes où l'indicateur s est pris en charge.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!