Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сохранение регистра при замене (https://javascript.ru/forum/misc/77435-sokhranenie-registra-pri-zamene.html)

MaXFeeD 04.05.2019 10:30

Сохранение регистра при замене
 
Здравствуйте!
Мне в последнее время стало необходимо работать с RegExp для поиска строк, а также их замены. Через некоторое время, столкнулся с проблемой - заменой строк с сохранением регистра. Думал использовать toUpperCase и toLowerCase для сравнение символов по отдельности, но думаю это будет как-то костыльно.
var reg = /ола/gi;
var str = "Ола ОЛА ола";
alert(str.replace(reg, "привет"));

Мне нужно сохранение регистра:
Ола -> Привет
ОЛА -> ПРИВЕТ
ола -> привет
Ну, точнее как сохранение... Количество символов разное - мне важен регистр, а не постоянный капслок.

Nexus 04.05.2019 10:34

Так?
var reg = /ола/g;
var str = "Ола ОЛА ола";
alert(str.replace(reg, "привет"));

https://javascript.ru/regexp

MaXFeeD 04.05.2019 10:38

ну, мне нужно чтобы было Привет ПРИВЕТ привет ;)

Nexus 04.05.2019 10:45

var str = "Ола ОЛА ола";
alert(
	str.replace(/ола/g, "привет")
		.replace(/Ола/g, "Привет")
		.replace(/ОЛА/g, "ПРИВЕТ")
);

MaXFeeD 04.05.2019 11:04

ну тогда как-нибудь в функцию отделить, просто у меня около 130 таких слов

рони 04.05.2019 12:06

MaXFeeD,
let str = "Ола ОЛА ола";
function fn(str)
{ const obj = {"ола" : "привет"};
  for (const [key, value] of Object.entries(obj)) {
  let reg = new RegExp(`${key}`, "gi");
  str = str.replace(reg, a => a == key ? value : a == key.toUpperCase() ? value.toUpperCase() : value.slice(0,1).toUpperCase() + value.slice(1))
  }
  return str
}
alert(fn(str));

MaXFeeD 04.05.2019 12:15

ну да, что-то такое. спасибо, надеюсь мои 130 слов не будут лагать ;)


Часовой пояс GMT +3, время: 13:57.