Regex pour comparer des chaînes de caractères avec Tréma et non-Tréma variations
Quelqu'un peut m'aider avec une expression régulière en javascript que je peux utiliser pour comparer des chaînes de caractères qui sont les mêmes, en tenant compte de leur non-Tréma-ed versions.
par exemple, en allemand, le mot Grüße
peut aussi être écrite Gruesse
. Ces deux chaînes sont considérées comme identiques. Les mappages (en ignorant les boyaux pour le moment) sont:
- ä = ae
- ü = ue
- ö = oe
- ß = ss
Comme il n'y a pas beaucoup de "couplets" à considérer que je pouvais faire un remplacement pour chaque variation, mais je me demandais si il existe un moyen plus élégant, surtout que ce cas d'utilisation peut avoir besoin d'être étendu à l'avenir comprennent, par exemple, Scandanavian personnages...
Vous devez vous connecter pour publier un commentaire.
quelque chose comme
vous pouvez facilement s'étend par l'ajout de plus d'entrées pour "tr"
pas très élégant, mais fonctionne
En plus de stereofrogs répondre:
J'ai été traiter avec des Trémas dans un Aptana/Eclipse script et les caractères normaux ('ä', etc.) ne pas faire l'affaire pour moi.
J'ai une autre façon : ( but : le tri des tableaux )
Les expressions régulières ne sont pas assez assez puissant pour faire cela correctement, mais on pouvait pirater compte près de travailler avec eux.
Ce que vous voulez est appelé de Normalisation Unicode. Un Normalisée de la chaîne est un converti à une forme courante de sorte que vous pouvez les comparer. Vous tagged votre post "javascript", cependant, Javascript n'est pas intégré dans la bibliothèque standard pour ce faire, et je ne suis pas au courant d'un désinvolte.
La plupart des langages côté serveur ont un, cependant. Par exemple, le Normalisateur De Classe en PHP. Python et Perl ont des équivalents, comme Microsoft trucs, j'en suis sûr.
Découvrez l'article de wikipédia sur Unicode Équivalence pour plus d'informations.
Vous pouvez utiliser la pipe comme un ou à un groupe pour chaque correspondance comme ce
(ä|ae)
.Est une façon de traiter votre regexp 'entrée' pour qu'il remplace par exemple " ä " avec (ae|ø)' - ne pas coder en dur les mappages de vos expressions régulières. Je suis complètement ignorant de javascript (ok, je sais que document.write (), mais c'est tout) - mais ici, c'est la même en pseudo code;
au lieu de faire
Vous devriez faire quelque chose comme:
Désolé d'être si "pythonic" - je ne sais pas si vous avez ré.compiler() -comme la structure en javascript, mais si vous ne le faites - vous devriez faire la boucle for lors de la compilation de la correspondance, pas dans my_regexp_match()
[äö]
).Regex
n'est pas le meilleur de la technologie pour résoudre ce problème.Vous devriez envisager de créer un dictionnaire pour stocker vos Tréma caractère de la clé et non-Tréma comme valeur, ce qui permet d'itérer sur yourdictionary, vérifiez s'il existe sur votre chaîne et de prendre les mesures appropriées.