11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Est-il possible de protéger un caractére spécial (ici le ?) dans une chaine, afin qu'il soit
reconnu par une RegEp ?


var chaine = 'De qu\'elle endroit ?';
			var reg = new RegExp('De qu\'elle endroit ?', 'gi');
			chaine = chaine.replace(reg, 'test');
			document.write(chaine);


Résultat :
test?

Le ? n'est pas pris en compte
Modifié par zeel36 (25 Nov 2016 - 14:46)
Administrateur
Bonjour,

l'orthographe m'a un petit peu choqué : "De quel endroit" / "De quelle façon" Smiley cligne

Je viens de tester dans la console et au 1er coup j'avais aussi "test?" mais ensuite en refaisant quelques manips j'ai obtenu "test" Smiley eek
Je me demande si c'est pas le fait de re-déclarer avec var plusieurs fois... (j'avais oublié l'antislash au départ, je l'ai mis ensuite puis j'ai changé d'onglet / relancé les DevTools de Fx et le résultat est OK Smiley smile

edit: https://regex101.com/r/SdwQfc/1

edit2: reteste avec


var chaine2 = 'De qu\'elle endroit ?';
			var reg2 = new RegExp('De qu\'elle endroit \?', 'gi');
			var resultat = chaine2.replace(reg2, 'test');
			document.write(resultat); // console.log() :o


edit3: ah ben non, bon je sais pas quelle est la différence entre mes tests Smiley decu
Modifié par Felipe (25 Nov 2016 - 15:04)

var chaine = 'De qu\'elle endroit ?';
var reg = new RegExp('De qu\'elle endroit ?', 'gi');
chaine = chaine.replace(reg, 'test');
document.write(chaine);

var chaine2 = 'De qu\'elle endroit ?';
var reg2 = new RegExp('De qu\'elle endroit \?', 'gi');
var resultat = chaine2.replace(reg2, 'test');
document.write(resultat); // console.log() :o


J'ai test?test? Smiley scared

edit : Pour l'ortographe c'était de quel endroit à la base, mais à force de faire des téstes ça à fini comme ça...
Modifié par zeel36 (25 Nov 2016 - 15:24)
J'ai : test

D'après un tutoriel :
RegExp ne possède que deux méthodes : test() et exec().

Il vaut peut-être mieux utiliser le type primitif avec replace()
var reg = /De qu\'elle endroit \?/gi;

Smiley smile
Modifié par Zelena (25 Nov 2016 - 15:28)
Modérateur
Sur les regex enchaînée, il faut savoir qu'une instance de RegExp garde un pointeur sur la position de la dernière occurrence trouvée et repartira de là lors du prochain test.

L'index peut être reset manuellement:


reg.lastIndex = 0;


ps: l'écriture litérale ou le constructeur ne change rien à ce phénomène
Modifié par kustolovic (25 Nov 2016 - 15:53)