String.prototype.replace podporuje vzory nahrazení

Dnes jsem narazil na blogový příspěvek (je však v němčině), který napsal Peter Kröner, a dozvěděl jsem se něco velmi úžasného.

Článek popisuje nepříliš známé chování metody String.prototype.replace . Použití této metody je obvykle velmi přímočaré. Pokud potřebujete, podporuje regulární výrazy, ale ve většině případů je to definování shodného řetězce a nahrazujícího řetězce.

To jsem si alespoň myslel... 🙈

Ukazuje se, že pokud je druhým argumentem řetězec (může to být také funkce) a obsahuje specifické sekvence znaků jako $& nebo $' Objeví se „kouzlo náhrady“.

const msg = 'This is a great message';

msg.replace('great', 'wonderful'); 
// "This is a wonderful message"
//
// -> 'great' is replaced by 'wonderful'

msg.replace('great', '$&-$&');
// "This is a great-great message"
// '$&' represents the matched substring
//
// -> 'great' is replaced by 'great-great'

msg.replace('great', '$`');
// "This is a This is a  message"
// '$`' represents the string before the matched string
//
// -> 'great' is replaced by 'This is a '

msg.replace('great', `$'`)
// "This is a  message message"
// `$'` represents the string after the matched string
//
// -> 'great' is replaced by ' message'

Ach můj..., toto chování může vést k velmi těžko odhalitelným chybám!

Pokud si o tom chcete přečíst více, podívejte se na replace dokumenty na MDN nebo tento přehled náhradních hodnot.


No