Maison >interface Web >js tutoriel >Comment faire correspondre le contenu multiligne avec les expressions régulières JavaScript ?
Surmonter les limites des expressions régulières JavaScript pour les correspondances multilignes
Lorsque vous travaillez avec des expressions régulières JavaScript, il devient crucial de comprendre comment faire correspondre un contenu qui s'étend sur plusieurs lignes. Considérez l'extrait de code suivant tentant d'extraire un bloc PRE contenant des nouvelles lignes :
<code class="js">var ss = "<pre class="brush:php;toolbar:false">aaaa\nbbb\ncccddd"; var arr = ss.match(/
Le résultat attendu est de capturer l'intégralité du bloc PRE, mais le résultat est une alerte nulle. Pour remédier à cela, nous approfondissons les subtilités de la correspondance multiligne.
Le Gambit '.|[rn]'
Une première approche consiste à remplacer le . caractère générique avec une expression qui correspond à n’importe quel caractère ou saut de ligne : (.|[rn]). Cependant, cela s'avère inefficace.
La Révélation : [sS]
La clé du succès réside dans l'utilisation de [sS] au lieu de . pour la correspondance multiligne. Cette classe de caractères englobe à la fois les caractères espaces et non-espaces, résolvant efficacement le problème.
<code class="js">var ss = "<pre class="brush:php;toolbar:false">aaaa\nbbb\ncccddd"; var arr = ss.match(/
/gm); alert(arr); // <pre class="brush:php;toolbar:false">...<\/pre></code>
Les subtilités de la cupidité : ' ?' vs ''
Une autre considération concerne le quantificateur utilisé. Bien que puisse sembler être le choix évident, il introduit une gourmandise inutile. '?' ou ' ?' garantit que la correspondance trouve la première occurrence au lieu de la plus longue possible.
Une note sur [^]
Alors que [^] peut également servir de point multiligne , il est obsolète selon un commentaire dans un autre article. Par conséquent, il est préférable de s'en tenir à [sS].
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!