Есть строка:
let formula = 'A+B*(ABS(B-A))'
И есть объект:
let replace_func = {
A: 'C+5',
B: 'D-2'
}
Необходимо сделать замену переменных в строке 'formula' на элементы 'replace_func' по ключам, так чтобы получилось:
let result = '(C+5)+(D-2)*(ABS((D-2)-(C+5)))'
Чтобы избежать замены в названии функции ABS(), было решено использовать регулярку:
let replace_regx = new RegExp('[\/\*\-\+\(]?' + cur_key + '[\/\*\-\+\)]?')
formula = formula.replace(replace_regx, replace_func[cur_key])
Но по регулярке заменяется не только название переменой, но и знаки перед и после нее (напр. вместо 'A' берется '-A)')
Как можно решить данную проблему? В регулярках не силен, поэтому прошу помощи)
Так как переменная в данном случая является словом из одной буквы, можно воспользоваться \b
- означающим границу слова.
В этом случае регулярное выражение примет вид:
/\b\w\b/g
При использовании этого выражения в методе replace, в функцию-обработчик будет передаваться отдельно стоящая буква, которая и будет возможной переменной для замены.
Возвращать из функции обработчика можно либо значение соответствующее замене, либо, если переменная отсутствует в списке замен, само совпавшее значение.
И общий вызов станет более общим.
let formula = 'A+B*(ABS(B-A))'
let replace_func = {
A: 'C+5',
B: 'D-2'
}
console.log(formula);
let result = formula.replace(/\b\w\b/g, $0 => `(${replace_func[$0] || $0})`);
console.log(result);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Необходимо уведомить Вас сразу: для меня эта тема новая, я знаком лишь с php
Вопрос такой стоит задача сделать 3д интерфейс вот с такими окнами: использовал все что мог и знал :
Добрый деньЕсть потребность игнорировать или перехватывать события мыши, такие как mousemove, mouseover, mouseout, то есть при наведении на ссылки не менять...