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);} );