Object RegExp

// Trois déclarations avec le même résultat.
var re1 = new RegExp("[a-f]","i");
var re2 = RegExp("[a-f]","i");
var re3 = /[a-f]/i;

Symboles

var objRegExp = new RegExp(strTest,"i"); 
// un interval  (tiret)                    -            à l'intérieur d'un choix de caractère [], 0-9 indique 0 à 9
// les choix de caractères                 []
// début/inverse                           ^            commence par ou inverse du choix des caractères dans un [] (exemple: [^a] n'est pas "a".
// fin                                     $            termine par
// les captures (parenthèse)               ( et )       permet de capturer un résultat et de le stocker dans les variables $1, $2, $3 ou dans le tableau de résultats
// ou                                      |            expression avant ou expression après /^allo|^bonjour/ signifie: commence par allo ou commence par bonjour.
// un caractère (point)                    .            n'importe quel caractère sauf \s
// zéro ou un caractère (interrogation)    ?
// un ou plusieurs caractères (plus)       +
// zéro ou plusieurs  caractères (étoiles) *

Cas spéciaux

\( parenthèse ouvrante
\) parenthèse fermante
\[ crochet ouvrant
\] crochet fermant
\| barre verticale
\. point
\* étoile
\? point d'interrogation
\^ chapeau
\$ signe de dollar

\d [0-9]
\n changement de ligne
\r retour de chariot
\s caractères espaces tel que ' ', \t, \n, \r
\S [^\s]
\t tabulation

Fonctions

  • boolean test(string)
  • [string,string,string...] exec(string)
    // [0] = premier résultat trouvé ()
    // [1] = deuxième resultat trouvé ()

Cas pratique

Résolution

// 800, x600 ou 800x600:
var re = /^\d+$|^\d*x\d+$/;

// test: false, false, false, true, true, true
[re.test(''), re.test('blabla') , re.test('600a'), re.test('600'), re.test('x600'), re.test('200x600')]

Couper des mots

Séparer des mots trop longs (problème d'affichage d'un texte) (2004/11/22 17:57)

var chaine = "12 12 34 abcdefghijkmnlopqrstuvwxyz";
console.log( chaine.replace(/(\S{4})(\S{4})??/g,"$1 $2") );

Résultat: "12 12 34 abcd efgh ijkm nlop qrst uvwx yz"

Multi-match global

On peut soit utiliser un while et un exec ou utiliser un replace avec une fonction.

var o = {};
var s = 'a1b2c3';
s.replace(/([a-z])([0-9])/g, function(_, a, b) {
  o[a] = b;
});
// o  est maintenant {"a":"1", "b":"2", "c":"3"}