JavaScript lookbehind regular

Ak ste sa stretli s tým, že ste chceli nájsť slovo podľa jeho začiatku, ale tento ste nehceli nahradzovat, tak v JavaScripte ste mali smolu. S týmto problémom som sa stretol aj ja. Môj pôvodný zámer bol nahradiť jedno slovo iným avšak tak aby sa nenahradzovala iba časť slova.

Takže tu je príklad:

var text = 'malý zúfalý regular' ;
var search = 'zúfalý';
var replacement = 'šťastný';

V ideálnom prípade by sa dalo použiť vymedzenie slova( word boundary ) b, a regular by vyzeral takto:

var regex = new RegExp( 'b' + search + 'b' , 'gi');
var finalText = text.replace( regex, replacement );

Vymedzenie slova je však funkčné iba pre ASCII znaky a kedže pre svoj príklad potrebujem utf-8 znaky, tak som musel nájsť iné riešenie.

Riešením by boli lookahead a lookbehind v regulárnom výraze. Problém však je, že javascript lookbehind nepozná.

Chvíľu mi trvalo kým som prišiel na vhodné riešenie, ale dokázal som to a tu je:

var regex = new RegExp( '(s*)' + search + '(?![a-zA-Z])', 'gi' );
var finalText = text.replace( regex, function($0,$1){ return $1+replacement);} );

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená.