2014-09-26 19 views
6

Desidero utilizzare espressioni regolari per la sostituzione delle stringhe con caratteri cirillici. Voglio usare l'opzione di corrispondenza esatta. La mia stringa di sostituzione è lavorare con i caratteri latini ed è alla ricerca di simile:La stringa sostituisce la corrispondenza esatta in cirillico

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

La stessa espressione non funziona con i caratteri cirillici

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

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

risposta

7

Il problema qui è \b parola chracter confine, che corrisponde a posizione in un limite di parole. Il limite della parola è definito come (^\w|\w$|\W\w|\w\W). E a sua volta word character\w è un insieme di caratteri ASCII [A-Za-z0-9_]. Ovviamente i caratteri cirillici non rientrano in questo set.

Ad esempio, per lo stesso motivo, l'espressione regolare /\w+/ non corrisponde alla stringa di Cyrillyc.

+0

Questo va bene. Spiega perché non funziona, ma c'è una soluzione. – user732456

4

As dfsq ha scritto il problema con il limite della parola. Se si rimuove \b, si otterrà l'output desiderato, ma è un regex abbastanza diverso. Sostituirà Един anche nei casi in cui è una parte della parola. Per evitare che è possibile utilizzare negative lookahead e definire quali lettere non dovrebbero apparire dietro, perché potrebbero essere una parte della parola.

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

@ user732456 Inoltre puoi provare '(?! [\ WЁ-ЌЎ-џ])' come limite [(regex101)] (http://regex101.com/r/qB8wM0/1) –

Problemi correlati