2009-12-31 20 views
5

È possibile lavorare con caratteri russi, nell'espressione regolare di javascript?
Forse l'uso di \ p {Cyrillic}?Regex in javascript con set di caratteri cirillici (russo)

Se sì, fornire un esempio di base di utilizzo.

L'esempio:

var str1 = "абв прв фву"; 
var regexp = new RegExp("[вф]\\b", "g"); 

alert(str1.replace(regexp, "X")); 

mi aspetto di ottenere: абX прX

risposta

6

Dovrebbe funzionare solo se si salva il file JavaScript in UTF8. Quindi dovresti essere in grado di inserire qualsiasi carattere in una stringa.

edit: appena fatto un esempio veloce con alcuni personaggi cryllic da Wikipedia:

var cryllic = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяабвгдеёжзийклмнопрстуфхцчшщъыьэюя'; 
cryllic.match('л.+а')[0]; 
// returns as expected: "лмнопрстуфхцчшщъыьэюяа" 
+0

ma se provo questo: var str1 = "абв"; var regexp = new RegExp ("[бв] \ b", "g"); alert (str1.replace (regexp, "е")); non funziona – samuel

+0

Il file è codificato al 100% UTF-8? Puoi provare con un singolo personaggio? –

+3

Sembra che il limite della parola '\ b' non funzioni correttamente. Se lo rimuovo, funziona correttamente, quindi prova a sostituirlo con '[]' o qualcosa del genere. – poke

1

Secondo this:

JavaScript, che non offre alcuna supporto Unicode attraverso il suo Classe RegExp , supporta \ uFFFF per corrispondente a un singolo punto di codice Unicode come t della sua sintassi delle stringhe.

in modo da poter utilizzare almeno i punti di codice, ma apparentemente niente di più (nessuna classe).

Inoltre controlla this duplicate della tua domanda.

+0

Questo sito non è corretto. JavaScript supporta Unicode in regexps. –

+0

Non riesco a trovare alcun riferimento in più rispetto ai singoli punti di codice come ho citato sopra, vedi ad es. http://www.w3schools.com/jsref/jsref_obj_regexp.asp Hai una fonte? –

6

Ecco un buon articolo su JavaScript regular expressions and unicode. Le stringhe in JavaScript sono 16 bit, quindi le stringhe e gli oggetti RegExp possono contenere caratteri unicode, ma la maggior parte dei caratteri speciali come '\ b', '\ d', '\ w' supporta solo ASCII. Quindi la tua espressione regolare non funziona come previsto a causa dell'uso di '\ b'. Sembra che dovrai trovare un modo diverso per rilevare i confini delle parole.

Problemi correlati