Problem z użyciem wyrażeń regularnych.

0

Cześć.

Dzięki Waszej pomocy coraz lepiej rozumiem wyrażenia regularne!
Szczególne podziękowania należą się @Freja Draco i @AdamWox .
Napotkałem na kolejny trudny (dla mnie) problem:
Chcę w stringu:

"aaa <though although though thoughts though. bbb"

zmienić tylko wyrazy though na powiedzmy (though)
czyli wynikowo powinno być:

"aaa <(though) although (though) thoughts (though). bbb"

Nie bardzo mam pomysł jak to zrobić.
Gdy używam tu wyrażeń regularnych to kasuję sobie interpunkcje.

Pomożecie ?

2

Nie wiem, jaki będziesz miał input, ale z tego co kojarzę, to robisz apkę do nauki słówek, więc myślę, że z powodzeniem możesz skorzystać z \b, co oznacza "word boundary".

const word = 'though';
const input = 'aaa <though although though thoughts though. bbb';
const pattern = new RegExp(`\\b${word}\\b`, 'g');
const output = input.replace(pattern, `(${word})`);

console.log(output);

Podwójne \\, dlatego, że jeżeli używasz \b w stringu, a nie w regex, to oznacza on backspace (w js regex można też zapisać /\bthough\b/).
new RegExp dlatego, że potrzebuje zmiennej w środku.

1

Do tak prostej zamiany, gdzie masz określony na sztywno wzorzec, nie potrzebujesz wyrażeń regularnych. Wystarczy zwykłe:
https://www.w3schools.com/jsref/jsref_replace.asp

Edit: a przepraszam, moja ślepota. Ty chciałeś tylko wyrazy, a poniższe zmieli każdy string. Zatem patrz post wyżej :)

// zamień pierwsze wystąpienie
string="aaa <though although though thoughts though. bbb";
string=string.replace("though", "(though)");
alert(string);
// zamień wszystkie wystąpienia
string="aaa <though although though thoughts though. bbb";
string=string.replace(/though/g, "(though)");
alert(string);
0
$ <<<'aaa <though although though thoughts though. bbb' sed -E 's/\b(though)\b/(\1)/g'
aaa <(though) although (though) thoughts (though). bbb
$ 

1 użytkowników online, w tym zalogowanych: 0, gości: 1