utf-8 limite de mot regex en javascript
En JavaScript:
"ab abc cab ab ab".replace(/\bab\b/g, "AB");
correctement me donne:
"AB abc cab AB AB"
Lorsque j'utilise les caractères utf-8 si:
"αβ αβγ γαβ αβ αβ".replace(/\bαβ\b/g, "AB");
la limite de mot opérateur ne semble pas fonctionner:
"αβ αβγ γαβ αβ αβ"
Est-il une solution à cela?
- JavaScript ne pas utiliser
UTF-8
pour l'Unicode. Selon la norme de mise en œuvre peuvent utiliser soit desUCS-2
ouUTF-16
je crois. Cela signifie soit que vous êtes d'exploitation sur le texte qui a été converti en l'un de ces formats, ou vous pourrait être opérationnel sur le texte où chaque "octet" (octet) de chaque Unicode codepoint a été converti en un des formats suivants, selon la façon dont votre code obtient le texte.
Vous devez vous connecter pour publier un commentaire.
La limite de mot affirmation ne correspond si un caractère de mot n'est pas précédé ou suivi d'un autre caractère de mot (donc
.\b.
est égal à\W\w
et\w\W
). Et\w
est défini comme[A-Za-z0-9_]
. Donc\w
ne correspond pas à des caractères grecs. Et donc vous ne pouvez pas utiliser\b
pour ce cas.Ce que vous pourriez faire à la place est d'utiliser cette:
"αβ αβ"
, le premier match de la consommer"αβ |αβ"
(|
indique que le pointeur interne) et la dernière partie ne sera pas associé, car il n'y a pas d'espace à gauche. Mais depuis le " look-ahead affirmation ne consomment pas de caractères, la position du pointeur après le premier match sera"αβ| αβ"
et le premier espace est préservé pour le prochain match.αβ!
par exemple.Pas tous les Javascript regexp la mise en œuvre a pour l'Unicode annonce de sorte que vous devez échapper
Pour la cartographie des caractères, vous pouvez prendre un coup d'oeil à http://htmlhelp.com/reference/html40/entities/symbols.html
Bien sûr, cela n'aide pas à la frontière de mot problème (comme expliqué dans d'autres réponses), mais devrait au moins vous permettre de faire correspondre correctement les caractères
\u03b1
censé être interprété?J'ai besoin de quelque chose pour être programmable et poignée de signes de ponctuation, parenthèses, etc.
http://jsfiddle.net/AQvyd/
J'ai écrit un script javascript éditeur de ressources donc, c'est pourquoi j'ai trouvé cette page, et également répondu par nécessité puisque je ne pouvais pas trouver une limite de mot parametarized regexp qui a bien fonctionné pour Unicode.
Pas toutes les implémentations de RegEx associés avec des moteurs Javascript unicode conscient.
Par exemple Microsoft JScript l'aide dans IE est limitée à la norme ANSI.
Lorsque vous faites affaire avec Unicode et en langage naturel des mots, vous voulez probablement être plus prudent avec les limites que juste à l'aide de
\b
. Voir cette réponse pour les détails et les instructions.