Maison >interface Web >js tutoriel >Pourquoi JavaScript Regex ne parvient-il pas à extraire le texte multiligne avec l'indicateur « m » ?

Pourquoi JavaScript Regex ne parvient-il pas à extraire le texte multiligne avec l'indicateur « m » ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-10 01:36:021004parcourir

Why Does JavaScript Regex Fail to Extract Multiline Text with the 'm' Flag?

Dilemme Regex : extraction de texte multiligne

En tentant d'extraire du texte du HTML à l'aide d'une regex JavaScript, un développeur a rencontré un obstacle inattendu : le l'indicateur multiligne (m) semblait inefficace pour capturer du texte multiligne.

Le modèle d'expression régulière fourni visait à extraire le texte inclus dans une balise h1 :

var pattern = /<div>

Cependant, lorsque la chaîne HTML contenait des nouvelles lignes (n), le résultat était systématiquement vide. La suppression des nouvelles lignes a résolu le problème, que l'indicateur m soit présent ou non.

La solution : le modificateur Dotall

Le coupable résidait dans l'absence de modificateur dotall dans JavaScript. Par défaut, le point (.) correspond à n'importe quel caractère sauf la nouvelle ligne. Pour surmonter cette limitation, une solution de contournement impliquant les classes de caractères et leur négation peut être utilisée :

[\s\S]

Cette classe de caractères correspond à n'importe quel caractère, y compris les nouvelles lignes et autres espaces. Incorporé dans l'expression régulière, il donne :

/<div>

Solution moderne avec l'indicateur DotAll

Depuis ES2018, JavaScript prend en charge l'indicateur s (dotAll). Cet indicateur demande explicitement au moteur d'expression régulière de permettre au point de correspondre aux nouvelles lignes, éliminant ainsi le besoin de solutions de contournement :

/<div>

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn