Результат совпадения в 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. Где ошибка? |
Цитата:
str = str.replace(re, '$1'); Цитата:
$1 для замены можно использовать только внутри строки. Но и $1 ничего не даст. это ссылка на первую группу в регулярном выражении. А у вас нет там групп. |
const slovar = {}; slovar['золото'] = 'Au'; let str = 'нашел золото'; const re = /золото/g; str = str.replace(re, (m) => slovar[m]); alert(str) // 'нашел Au' |
Спасибо за ответ! Из него я понял, что для подобных задач лучше использовать другой язык программирования. Сделал это на Perl, но столкнулся с другой проблемой. Данные не хотят меняться в textarea в современных браузерах. Работает только в IE11.
|
Часовой пояс GMT +3, время: 13:26. |