55 votes

Correspondance des caractères accentués avec Javascript regexes

Voici un amusant extrait de j'ai couru aujourd'hui:

/\ba/.test("a") --> true
/\bà/.test("à") --> false

Cependant,

/à/.test("à") --> true

Tout d'abord, wtf?

Deuxièmement, si je veux correspondre à un caractère accentué au début d'un mot, comment puis-je le faire? (J'aimerais vraiment éviter l'utilisation de over-the-top sélecteurs comme /(?:^|\s|'|\(\) ....)

66voto

Wak Points 200

Cela a fonctionné pour moi:

/^[a-z\u00E0-\u00FC]+$/i

Avec l'aide de ici

40voto

Riimu Points 1007

La raison pourquoi /\bà/.test("à") ne correspond pas c'est parce que "à" n'est pas un caractère de mot. La séquence d'échappement \b correspond uniquement entre une frontière de mot de caractères et un caractère de mot. /\ba/.test("a") matchs parce que "a" est un caractère de mot. En raison de cela, il y a une frontière entre le début de la chaîne (ce qui n'est pas un caractère de mot) et la lettre "a" qui est un caractère de mot.

Les caractères de mot dans le code JavaScript de la regex est défini comme [a-zA-Z0-9_].

Pour correspondre à un caractère accentué au début d'une chaîne, il suffit d'utiliser l' ^ personnage au début de l'expression régulière (par exemple, /^à/). Ce caractère signifie le début de la chaîne (à la différence de \b qui correspond à aucune limite de mot au sein de la chaîne). C'est le plus basique et standard expression régulière, donc ce n'est certainement pas sur le dessus.

2voto

stema Points 36113

Un Débordement de pile a eu aussi un problème avec les caractères non ASCII dans les regex, vous pouvez le trouver ici. Ils ne sont pas à composer avec les limites des mots, mais peut-être vous donne de toute façon les conseils utiles.

Il y a une autre page, mais il veut faire correspondre les chaînes et non pas des paroles.

Je ne sais pas, et n'a pas trouvé maintenant, un point d'ancrage pour votre problème, mais quand je vois ce monstre regexes dans mon premier lien sont utilisés, votre groupe, que vous voulez éviter, n'est pas sur le dessus et à mon avis votre solution.

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