Frage

In JavaScript:

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

gibt mir richtig:

"AB abc cab AB AB"

Wenn ich utf-8-Zeichen aber:

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

Wortgrenze Operator nicht zu funktionieren scheint:

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

Gibt es eine Lösung für dieses?

War es hilfreich?

Lösung

Die Wortgrenze Behauptung überein nur, wenn ein Wortzeichen wird von einem anderen Wortzeichen nicht vor oder nach (so .\b. zu \W\w und \w\W gleich ist). Und \w als [A-Za-z0-9_] definiert. So \w entspricht nicht griechische Zeichen. Und so kann man nicht \b für diesen Fall verwendet werden.

Was Sie könnten stattdessen zu tun ist, diese zu verwenden:

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

Andere Tipps

Nicht alle Javascript regexp Implementierung hat die Unterstützung für Unicode-Anzeige, so dass Sie es brauchen zu entkommen

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

Für die Zeichen Abbildung können Sie einen Blick auf http://htmlhelp.com /reference/html40/entities/symbols.html

Natürlich ist dies nicht die Hilfe bei der Wortgrenze Ausgabe (wie in anderen Antworten erklärt), aber sollten Sie zumindest ermöglichen, die Zeichen entsprechen richtig

Ich brauchte etwas programmierbar und Griff Interpunktion, Klammern, etc. sein

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);
}

Ich habe einen Javascript-Ressource-Editor geschrieben, so ist dies, warum ich diese Seite gefunden habe, und beantworten sie auch aus der Not heraus, da ich kein Wort Grenze parametarized regulären Ausdruck, funktionierte gut für Unicode finden konnte.

Nicht alle Implementierungen von RegEx im Zusammenhang mit Javascript-Motoren ein Unicode bewusst.

Zum Beispiel Microsofts JScript in IE beschränkt sich auf ANSI.

Wenn Sie mit Unicode und natürlichsprachlichen Wörter zu tun haben, möchten Sie wahrscheinlich vorsichtiger mit Grenzen sein als nur \b verwenden. Siehe diese Antwort für Details und Richtungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top