Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.05.2019, 10:30
Аватар для MaXFeeD
Новичок на форуме
Отправить личное сообщение для MaXFeeD Посмотреть профиль Найти все сообщения от MaXFeeD
 
Регистрация: 04.05.2019
Сообщений: 4

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

Мне нужно сохранение регистра:
Ола -> Привет
ОЛА -> ПРИВЕТ
ола -> привет
Ну, точнее как сохранение... Количество символов разное - мне важен регистр, а не постоянный капслок.
Ответить с цитированием
  #2 (permalink)  
Старый 04.05.2019, 10:34
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,748

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

https://javascript.ru/regexp
Ответить с цитированием
  #3 (permalink)  
Старый 04.05.2019, 10:38
Аватар для MaXFeeD
Новичок на форуме
Отправить личное сообщение для MaXFeeD Посмотреть профиль Найти все сообщения от MaXFeeD
 
Регистрация: 04.05.2019
Сообщений: 4

ну, мне нужно чтобы было Привет ПРИВЕТ привет
Ответить с цитированием
  #4 (permalink)  
Старый 04.05.2019, 10:45
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,748

var str = "Ола ОЛА ола";
alert(
	str.replace(/ола/g, "привет")
		.replace(/Ола/g, "Привет")
		.replace(/ОЛА/g, "ПРИВЕТ")
);
Ответить с цитированием
  #5 (permalink)  
Старый 04.05.2019, 11:04
Аватар для MaXFeeD
Новичок на форуме
Отправить личное сообщение для MaXFeeD Посмотреть профиль Найти все сообщения от MaXFeeD
 
Регистрация: 04.05.2019
Сообщений: 4

ну тогда как-нибудь в функцию отделить, просто у меня около 130 таких слов
Ответить с цитированием
  #6 (permalink)  
Старый 04.05.2019, 12:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

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));
Ответить с цитированием
  #7 (permalink)  
Старый 04.05.2019, 12:15
Аватар для MaXFeeD
Новичок на форуме
Отправить личное сообщение для MaXFeeD Посмотреть профиль Найти все сообщения от MaXFeeD
 
Регистрация: 04.05.2019
Сообщений: 4

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение формы при переходе на другое view. Alexej Angular.js 2 20.11.2014 14:45
Сохранение цвета рамки DIV при нажатии, и сброс при нажатии на другой DIV этого класа Webtest Элементы интерфейса 3 29.06.2014 22:13
Изменение прозрачности при клике AJIUK jQuery 8 09.03.2014 16:00
Сохранение данных при перезагрузке страницы dannogo Javascript под браузер 2 18.02.2014 18:43
при нажатии на раздел меню поворачивается маркер Сергей545 Элементы интерфейса 5 08.12.2013 22:15