Domanda

In JavaScript:

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

mi dà correttamente:

"AB abc cab AB AB"

Quando uso caratteri UTF-8 se:

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

parola operatore confine non sembra funzionare:

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

C'è una soluzione a questo?

È stato utile?

Soluzione

La parola asserzione confine non corrisponde solo se un carattere di parola non è preceduto o seguito da un altro carattere di parola (in modo .\b. è pari a \W\w e \w\W). E \w è definito come [A-Za-z0-9_]. Quindi \w non corrisponde caratteri greci. E così non è possibile utilizzare \b per questo caso.

Che cosa si potrebbe fare, invece è quello di utilizzare questo:

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

Altri suggerimenti

Non tutti Javascript regexp implementazione ha il supporto per Unicode annuncio quindi è necessario sfuggire

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

Per la mappatura dei caratteri è possibile dare un'occhiata a http://htmlhelp.com /reference/html40/entities/symbols.html

Naturalmente, questo non aiuta il problema confine di parola (come spiegato in altre risposte), ma dovrebbe almeno consentono di corrispondere ai caratteri correttamente

Avevo bisogno di qualcosa di essere programmabile e maniglia punteggiatura, parentesi, ecc

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

Ho scritto un editor di risorse javascript quindi questo è il motivo per cui ho trovato questa pagina e anche risposto che per necessità dato che non riuscivo a trovare un confine di parola regexp parametarized che ha funzionato bene per Unicode.

Non tutte le implementazioni di RegEx associati a motori JavaScript un unicode consapevoli.

Ad esempio Microsofts JScript utilizzando in IE è limitato a ANSI.

Quando hai a che fare con Unicode e le parole del linguaggio naturale, probabilmente avrete bisogno di essere più attenti con i confini che solo usando \b. Vedere questa risposta per i dettagli e le direzioni.

scroll top