2014-09-26 20 views
6

Ich möchte Regex für Zeichenfolge ersetzen mit kyrillischen Zeichen. Ich möchte die Option für exakte Übereinstimmung verwenden. Meine Zeichenfolge ersetzen ist mit lateinischen Zeichen arbeiten und sucht wie folgt aus:String ersetzen genaue Übereinstimmung in kyrillischen

'Edin'.replace(/\Edin\b/gi, ''); // Output is "" 

Der gleiche Ausdruck funktioniert nicht mit kyrillischen Zeichen

'Един'.replace(/\Един\b/gi, ''); // Output is still 'Един' 
+0

http://regex101.com/r/lS5tT3/42 – vks

Antwort

7

Das Problem hier ist \b Wortgrenze chracter, die Position übereinstimmt an eine Wortgrenze. Die Wortgrenze ist definiert als (^\w|\w$|\W\w|\w\W). Und seinerseits ist word character\w ein Satz von ASCII-Zeichen [A-Za-z0-9_]. Offensichtlich fallen kyrillische Zeichen nicht in dieses Set.

Zum Beispiel, aus dem gleichen Grund /\w+/ regulären Ausdruck wird nicht entsprechen Cyrillyc Zeichenfolge.

+0

Das ist gut. Es erklärt, warum es nicht funktioniert, aber gibt es eine Lösung. – user732456

4

Wie dfsq schrieb das Problem ist mit Wortgrenze. Wenn Sie \b entfernen, erhalten Sie die gewünschte Ausgabe, aber es ist ziemlich anders Regex. Es wird Един auch in Fällen ersetzen, wo es ein Teil des Wortes ist. Um das zu vermeiden, können Sie negative lookahead verwenden und definieren, welche Buchstaben nicht dahinter erscheinen sollen, weil sie ein Teil von Word sein könnten.

'Един'.replace(/\Един(?![A-я])/gi, ''); 
+1

@ user732456 Kann auch versuchen '(?! [\ WЁ-ЌЎ-џ])' als Grenze [(regex101)] (http://regex101.com/r/qB8wM0/1) –

Verwandte Themen