304 votes

Comment utiliser l'expression rationnelle JavaScript sur plusieurs lignes ?

var ss= "<pre>aaaa\nbbb\nccc</pre>ddd";
var arr= ss.match( /<pre.*?<\/pre>/gm );
alert(arr);     // null

Je voudrais que le bloc PRE soit repris, même s'il s'étend sur plusieurs caractères de saut de ligne. Je pensais que le drapeau 'm' le faisait. Ce n'est pas le cas.

J'ai trouvé la réponse aquí avant de poster. Puisque je pensais connaître JavaScript (j'ai lu trois livres, travaillé des heures) et qu'il n'y avait pas de solution existante chez SO, je vais oser poster quand même. jeter des pierres ici

La solution est donc la suivante :

var ss= "<pre>aaaa\nbbb\nccc</pre>ddd";
var arr= ss.match( /<pre[\s\S]*?<\/pre>/gm );
alert(arr);     // <pre>...</pre> :)

Quelqu'un a-t-il une façon moins cryptique de le faire ?

Edit : ce est un doublon mais comme il est plus difficile à trouver que le mien, je ne le supprime pas.

Elle propose [^] comme un "point multiligne". Ce que je ne comprends toujours pas, c'est pourquoi [.\n] ne fonctionne pas. Je suppose que c'est l'une des parties tristes de JavaScript

36 votes

Une regex moins cryptique ? Impossible, par nature.

0 votes

Au fait, vous devriez lire : "Parsing Html : La méthode Cthulhu" codinghorror.com/blog/archives/001311.html

2 votes

Le lien a changé par rapport au commentaire précédent : blog.codinghorror.com/parsing-html-the-cthulhu-way (environ 5 ans plus tard)

0voto

itz-azhar Points 625

En plus des exemples susmentionnés, il existe une alternative.

^[\\w\\s]*$

Dónde \w est pour les mots et \s est pour les espaces blancs

0voto

[\\w\\s]*

Celle-ci m'a été d'une aide précieuse, en particulier pour faire correspondre plusieurs choses qui incluent de nouvelles lignes, toutes les autres réponses ne font que regrouper toutes les correspondances.

0voto

Husi 012 Points 71

Il existe maintenant le modificateur s (single line), qui permet au point de correspondre à de nouvelles lignes :) \s correspondra également aux nouvelles lignes :D

Il suffit d'ajouter le s derrière la barre oblique

 /<pre>.*?<\/pre>/gms

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X