2009-12-31 8 views
5

Ist es möglich, mit russischen Zeichen zu arbeiten, in Javascript Regex?
Vielleicht die Verwendung von \ p {kyrillisch}?Regex in Javascript Workin mit kyrillischen (Russisch) Set

Wenn ja, bitte ein einfaches Anwendungsbeispiel angeben.

Das Beispiel:

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

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

Ich erwarte, dass zu bekommen: абX прX

Antwort

6

Es sollte funktionieren, wenn Sie nur die JavaScript-Datei in UTF-8 speichern. Dann sollten Sie ein beliebiges Zeichen in einer Zeichenfolge eingeben können.

edit: gemacht einfach ein kurzes Beispiel mit einigen cryllic Zeichen aus Wikipedia:

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

aber wenn ich das versuche: var str1 = "абв"; var regexp = new RegExp ("[бв] \ b", "g"); Warnung (str1.replace (regexp, "ë")); es funktioniert nicht. – samuel

+0

Ist Ihre Datei 100% UTF-8 codiert? Kannst du es mit einem einzelnen Charakter versuchen? –

+3

Es scheint, dass die Wortgrenze '\ b' nicht korrekt funktioniert. Wenn ich es entferne, funktioniert es richtig, also versuche es durch '[]' oder etwas ähnliches zu ersetzen. – poke

1

Nach this:

JavaScript, die keine Unicode-Unterstützung anbietet durch seine RegExp Klasse, unterstützt \ uFFFF für einen einzelnen Unicode-Codepunkt als Par t seiner String-Syntax.

so können Sie zumindest Codepunkte verwenden, aber scheinbar nichts mehr (keine Klassen).

Überprüfen Sie auch this duplicate Ihrer Frage.

+0

Diese Seite ist falsch. JavaScript unterstützt Unicode in regulären Ausdrücken. –

+0

Ich kann keinen Verweis auf mehr als den Vergleich mit einzelnen Codepunkten finden, wie ich oben zitiert habe, siehe z.B. http://www.w3schools.com/jsref/jsref_obj_regexp.asp Haben Sie eine Quelle? –

6

Hier ist ein guter Artikel auf JavaScript regular expressions and unicode. Strings in JavaScript sind 16 Bit, also können Strings und RegExp-Objekte Unicode-Zeichen enthalten, aber die meisten Sonderzeichen wie '\ b', '\ d', '\ w' unterstützen nur ASCII. Ihr regulärer Ausdruck funktioniert also aufgrund der Verwendung von '\ b' nicht wie erwartet. Es scheint, dass Sie eine andere Möglichkeit finden müssen, Wortgrenzen zu erkennen.