Применение замены несколько раз (динамически с Javascript) - PullRequest
0 голосов
/ 13 июня 2019

У меня есть текущая функция:

function replaceValue(v) {
  const firstRegex = new RegExp('hello', 'g');
  const secondRegex = new RegExp('bye', 'g');

  return v.replace(firstRegex, '@').replace(secondRegex, '#');
}

Однако теперь я хочу добавить еще больше регулярных выражений и хочу иметь структуру данных, которая выглядит следующим образом:

const regexStorage = [{
 value: '@',
 replace: 'hello',
}, {
 value: '#',
 replace: 'bye',
}]

Я не могу найти способ использовать это regexStorage для динамического добавления столько замен, сколько они существуют в массиве для данного значения.

Я дошел до этого:

function replaceValue(v) {
  const firstRegex = new RegExp(regexStorage[0].replace, 'g');
  const secondRegex = new RegExp(regexStorage[1].replace, 'g');

  return v.replace(firstRegex, regexStorage[0].value).replace(secondRegex, regexStorage[1].value);
}

Но это только использование хранилища. Интересно, как я могу сделать это динамически.

Ответы [ 2 ]

2 голосов
/ 13 июня 2019

В JS вы можете записать сокращение на одну строку (которое было разработано для этого точного сценария работы с массивом, но с возвратом единственного значения) ( mdn ) в виде:

const regexStorage = [{
 value: '@',
 replace: 'hello',
}, {
 value: '#',
 replace: 'bye',
}];

let replaceValue = v => regexStorage.reduce((v, {value, replace}) => v.replace(new RegExp(replace, 'g'), value), v);

let str = 'hi hello bye bi hello';
console.log(replaceValue(str));
console.log(str);
1 голос
/ 13 июня 2019

Вы можете просто пройтись по своему хранилищу регулярных выражений

const regexStorage = [
  {
   value: '@',
   replace: 'hello',
  }, 
  {
   value: '#',
   replace: 'bye',
  }
]


function replaceValue(v) {
  for(var i = 0; i < regexStorage.length; i++){
    v = v.replace(new RegExp(regexStorage[i].replace, "g"), regexStorage[i].value);
  }
  return v;
}
var data = "hello, my name is andam. bye.";
console.log(data);
console.log(replaceValue(data));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...