Próbuję zamienić wszystkie [space] na - między __tt a tt__

Mógłbym zastąpić spację w całym ciągu poniższym wyrażeniem regularnym.

var str = document.getElementById('tt').value;
str = str.replace(/(?<=__tt.*) (?=.*tt__)/g, '-');
console.log(str);
textarea {
  width: 400px;
  min-height: 100px;
}
<textarea id="tt">This is a long text __tt where i want 
to replace
some text tt__ between some character
</textarea>

Czy istnieje sposób, w jaki mógłbym dokonać zamiany tylko między tagiem __tt a tt__ ???

1
Pugazh 1 kwiecień 2020, 18:10

3 odpowiedzi

Najlepsza odpowiedź

Bez lookaroundów, które nie są jeszcze w pełni obsługiwane przez wszystkie przeglądarki, możesz również użyć zamiany za pomocą funkcji wywołania zwrotnego tylko dla wybranego dopasowania.

str = str.replace(/__tt.*?tt__/g, m => m.replace(/ /g, "-"));
var str = 'This is a long text __tt where i want to replace some text tt__ between some character';
str = str.replace(/__tt.*?tt__/g, m => m.replace(/ /g, "-"));
console.log(str);

Uwaga

Jeśli chcesz użyć pojedynczego łącznika w zastępstwie wielu kolejnych spacji, możesz powtórzyć spację 1 lub więcej razy, używając + lub dopasować 1 lub więcej białych znaków, używając \s+

Po zaktualizowanym pytaniu pobierz tekst elementu:

var elm = document.getElementById("tt");
elm.textContent = elm.textContent.replace(/__tt[^]*?tt__/g, m => m.replace(/ +/g, "-"));
<textarea id="tt" rows="4" cols="50">This is a long text __tt where i want
to replace
some text tt__ between some character
</textarea>
2
The fourth bird 1 kwiecień 2020, 16:51

Może spróbować

let str = 'This is a long text __tt where i want to replace some text tt__ between some character';
str = str.replace(/__tt.*?tt__/g, (item) => item.replace(/ /g, "-"));
console.log(str);
1
ironCat 1 kwiecień 2020, 15:17

Możesz spojrzeć pozytywnie za siebie i spojrzeć w przyszłość.

var str = 'This is a long text __tt where i want to replace some text tt__ between some character';

str = str.replace(/(?<=__tt.*) (?=.*tt__)/g, '-');

console.log(str);
3
Nina Scholz 1 kwiecień 2020, 15:14