Salut salut,
Je suis en train de me faire une petite regexp pour transformer automatiquement les mots style 2èm, 14éme, 7ième en joli code propre du style 14<sup>è</sup>.

Je veux que quel que soit le format rentré, ça me sorte le chiffre suivi de <sup>è</sup>.

Les formats suivants doivent être reconnus :
4é, 4è, 4e
4ém, 4èm, 4em
4éme, 4ème, 4eme
4ié, 4iè, 4ie
4iém, 4ièm, 4iem
4iéme, 4ième, 4ieme

Donc voilà la regexp telle que je l'ai écrite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ret = ret.replace(/\b(\d+)i?[eéè](me?)?\b/g, "$1<sup>è</sup>");
Un ou plusieurs chiffres, éventuellement un "i", (un e ou un é ou un è), éventuellement un m suivi éventuellement un e

Et voilà le résultat :
Sans accent : matche à tous les coups
2e => ok, retourne 2<sup>è</sup>
2em => ok, retourne 2<sup>è</sup>
2eme => ok, retourne 2<sup>è</sup>
2ie => ok, retourne 2<sup>è</sup>
2iem => ok, retourne 2<sup>è</sup>
2ieme => ok, retourne 2<sup>è</sup>

Accent aigu :
2é => ne matche pas
2ém => ok, retourne 2<sup>è</sup>
2éme => ok, retourne 2<sup>è</sup>
2ié => ne matche pas
2iém => ok, retourne 2<sup>è</sup>
2iéme => ok, retourne 2<sup>è</sup>

Accent grave :
2è => ne matche pas
2èm => ok, retourne 2<sup>è</sup>
2ème => ok, retourne 2<sup>è</sup>
2iè => ne matche pas
2ièm => ok, retourne 2<sup>è</sup>
2ième => ok, retourne 2<sup>è</sup>


Ce que je pige pas, c'est que "2e" matche, "2em" matche, "2èm" matche, mais "2è" ne matche pas. Quelqu'un peut m'éclairer ? Merci d'avance...