Utf-8 word boundary regex en javascript

En JavaScript:

"ab abc cab ab ab".replace(/\bab\b/g, "AB"); 

Me donne correctement:

 "AB abc cab AB AB" 

Quand j'utilise les caractères utf-8 cependant:

 "αβ αβγ γαβ αβ αβ".replace(/\bαβ\b/g, "AB"); 

L' opérateur de limite de mots ne semble pas fonctionner:

 "αβ αβγ γαβ αβ αβ" 

Y a-t-il une solution à cela?

L'assertion des limites du mot ne correspond que 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 aux caractères grecs. Et donc, vous ne pouvez pas utiliser \b pour cette affaire.

Ce que vous pourriez faire à la place, c'est utiliser ceci:

 "αβ αβγ γαβ αβ αβ".replace(/(^|\s)αβ(?=\s|$)/g, "$1AB") 

Toutes les versions de la version regexp de Javascript ne sont pas compatibles avec l'annonce Unicode, donc vous devez l'échapper

 "αβ αβγ γαβ αβ αβ".replace(/\u03b1\u03b2/g, "AB"); // "AB ABγ γAB AB AB" 

Pour le mappage des caractères, vous pouvez consulter http://htmlhelp.com/reference/html40/entities/symbols.html

Bien sûr, cela n'aide pas le problème de la limite de mots (comme expliqué dans d'autres réponses), mais devrait au moins vous permettre de faire correspondre les caractères correctement

J'avais besoin de quelque chose pour être programmable et gérer la ponctuation, les parenthèses, etc.

http://jsfiddle.net/AQvyd/

 var wordToReplace = '買い手', replacementWord = '[[BUYER]]', text = 'Mange 買い手 information. The selected Store and Classification will be the default on the สั่งซื้อ.' function replaceWord(text, wordToReplace, replacementWord) { var re = new RegExp('(^|\\s|\\(|\'|"|,|;)' + wordToReplace + '($|\\s|\\)|\\.|\'|"|!|,|;|\\?)', 'gi'); return text.replace(re, replacementWord); } 

J'ai écrit un éditeur de ressource javascript, donc c'est pourquoi j'ai trouvé cette page et je l'ai également répondu par nécessité car je n'ai pas pu trouver une syntaxe paramétrique définie par les mots qui fonctionnait bien pour Unicode.

Toutes les implémentations de RegEx associées aux moteurs Javascript ne sont pas prises en compte par unicode.

Par exemple Microsofts, l'utilisation de JScript dans IE est limitée à ANSI.

Lorsque vous rencontrez des mots Unicode et des mots en langage naturel, vous voulez probablement être plus prudent avec les limites que simplement utiliser \b . Consultez cette réponse pour obtenir des détails et des instructions.