Question

En JavaScript:

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

correctement me donne:

"AB abc cab AB AB"

Quand j'utilise caractères UTF-8 si:

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

mot ne semble pas fonctionner:

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

Y at-il une solution à cela?

Était-ce utile?

La solution

L'affirmation limite de mot ne correspond que si un caractère de mot est pas précédé ou suivi d'un autre caractère de mot (si .\b. est égal à \W\w et \w\W). Et \w est défini comme [A-Za-z0-9_]. Alors \w ne correspond pas aux caractères grecs. Et vous ne pouvez donc pas utiliser \b pour ce cas.

Qu'est-ce que vous pourriez faire à la place est d'utiliser ceci:

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

Autres conseils

ne sont pas tous la mise en œuvre regexp Javascript support pour Unicode annonce que vous devez échapper

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

pour mapper les caractères que vous pouvez jeter un oeil à http://htmlhelp.com /reference/html40/entities/symbols.html

Bien sûr, cela ne l'aide avec le mot question de la frontière (comme expliqué dans d'autres réponses), mais devrait au moins vous permettre de faire correspondre les caractères correctement

Je besoin de quelque chose pour être la ponctuation programmable et poignée, crochets, 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 ressources javascript donc ce pourquoi j'ai trouvé cette page et aussi répondu par nécessité que je ne pouvais pas trouver un mot limite regexp parametarized qui a bien fonctionné pour Unicode.

Pas toutes les implémentations de RegEx associés aux moteurs Javascript unicode courant.

Par exemple Microsofts JScript utilisant dans IE est limitée à la norme ANSI.

Quand vous traitez avec Unicode et les mots en langage naturel, vous voulez sans doute être plus prudent avec les limites que la simple utilisation \b. Voir cette réponse pour plus de détails et directions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top