Как заменить все совпадения слов после указанного c символа, но игнорируя подчеркивание в javascript? - PullRequest
0 голосов
/ 03 мая 2020

Допустим, у меня есть строка с именем target и объект с именем data , которые определены как:

var data : {
 value_1: "Hi"
}

var target = "Replace $value_1"

Итак, чтобы заменить value_1 со значением, установленным в data , я сделал:

target = target.replace(/\$(\w+)/gm, function(_, a) {
  console.log(a) // => value 
  // But I want value_1, I know "_" is not a word but how do I do it ?
  return data[a.trim()]
 })

Вы можете мне помочь?

Ответы [ 2 ]

2 голосов
/ 03 мая 2020

Вы можете обновить regex, чтобы соответствовать слову с числом.

var data = {
  value_1: "Hi",
  value_2: "how",
  value_3: "are",
  value_4: "you",
};

var target = "Replace $value_1 $value_2 $value_3 $value_4?";
const template = (str) => str.replace(/\$(\w+_\d+)/g, (_, m) => data[m]);
console.log(template(target));

Вы можете использовать string literal для лучшей обработки и очистки кода.

Образец:

function template(strings, ...keys) {
  return (dict) =>
    keys
      .reduce(
        (m, key, i) => {
          m = m.concat(dict[key], strings[i + 1]);
          return m;
        },
        [strings[0]]
      )
      .join("");
}
const dict = {
  value_1: "Hi",
  value_2: "how",
  value_3: "are",
  value_4: "you",
};

let html = template`Replace ${"value_1"} ${"value_2"} ${"value_3"} ${"value_4"}?`;
console.log(html(dict));
1 голос
/ 03 мая 2020

Я думаю, что это всегда будет работать:

var data = {
 value_1: "Hi"
}

var target = "Replace $value_1";

target = target.replace(/\$((\w|\_)+)/gm, function(_, a) {
  console.log(a) // => value 
  // But I want value_1, I know "_" is not a word but how do I do it ?
  return data[a.trim()]
 });

console.log(target);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...