Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.04.2023, 22:22
Профессор
Отправить личное сообщение для javascript_pupil Посмотреть профиль Найти все сообщения от javascript_pupil
 
Регистрация: 05.07.2009
Сообщений: 222

Результат совпадения в regexp не работает в качестве ключа хеша. Что не так?
Краткий пример:

function search_replace(entry) {

const slovar = {};
slovar['золото'] = 'Au';

var obj = document.forms[0].elements[entry];
var str = obj.value;

re = /золото/g;
str = str.replace(re, slovar[$1]); // НЕ работает

re = /золото/g;
str = str.replace(re, $1); // работает

obj.value = str;

}


Т.е. регулярное выражение нормально ловит слово "золото" и помещает его в $1, но при этом не понимает конструкцию slovar[$1], хотя хеш вроде бы как рабочий и slovar['золото'] выдает Au.

Где ошибка?
Ответить с цитированием
  #2 (permalink)  
Старый 08.04.2023, 22:55
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Сообщение от javascript_pupil
str = str.replace(re, $1); // работает
Я думаю, что это тоже не работает. Должно быть
str = str.replace(re, '$1');

Сообщение от javascript_pupil
str = str.replace(re, slovar[$1]);
Ну это не работает, т.к. вторым аргументом может быть либо строка, в которой могут быть шаблоны замены, либо функция. А вы передаете свойство объекта, имя которого задано неопределенной переменной $1

$1 для замены можно использовать только внутри строки.
Но и $1 ничего не даст. это ссылка на первую группу в регулярном выражении. А у вас нет там групп.

Последний раз редактировалось voraa, 08.04.2023 в 23:13.
Ответить с цитированием
  #3 (permalink)  
Старый 08.04.2023, 23:11
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

const slovar = {};
slovar['золото'] = 'Au';

let str = 'нашел золото';

const re = /золото/g;
str = str.replace(re, (m) => slovar[m]);
alert(str) // 'нашел Au'

Последний раз редактировалось ksa, 09.04.2023 в 10:16.
Ответить с цитированием
  #4 (permalink)  
Старый 15.04.2023, 11:29
Профессор
Отправить личное сообщение для javascript_pupil Посмотреть профиль Найти все сообщения от javascript_pupil
 
Регистрация: 05.07.2009
Сообщений: 222

Спасибо за ответ! Из него я понял, что для подобных задач лучше использовать другой язык программирования. Сделал это на Perl, но столкнулся с другой проблемой. Данные не хотят меняться в textarea в современных браузерах. Работает только в IE11.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнение массива промисов последовательно arealhz Node.JS 30 07.07.2018 12:45
Не работает if(true){}, что не так? switch001 Javascript под браузер 5 09.08.2013 10:17
http://gigalit.info - Мои контакты Маэстро Ваши сайты и скрипты 70 08.12.2011 03:12
О фрилансе (Личный опыт) free Оффтопик 105 18.08.2011 17:02
Поюзайте хомячка Nanto Ваши сайты и скрипты 30 06.06.2011 22:16