根据映射替换字符串中的某些值 - JS

a24*_*918 2 javascript regex string

我有一个字符串,其中包含单词,后跟冒号。我需要用对象中的值替换该字符串中的冒号。我能够提取出冒号单词,但不确定在字符串中替换它的最佳方法。

这就是我所拥有的:

const string = 'This is :state :buttonName by :name';

const buttonName = 'button link';

const data = {
  state: 'Alabama',
  name: 'Arun'
}

const res = string.match(/:[a-zA-Z]+/g).map(i => i.replace(':', ''))


console.log(res)

// This is Alabama button link by Arun
Run Code Online (Sandbox Code Playgroud)

最终结果应该是

This is Alabama button link by Arun
Run Code Online (Sandbox Code Playgroud)

请指教。

Wik*_*żew 6

首先,您需要移动const buttonName = 'button link';到阵列。

您需要使用String#replace,但还需要捕获之后的正则表达式部分:,并实际使用 Group #1 值作为键来获取正确的data值。

此外,您需要检查提取的密钥是否在字典内以避免出现问题。

您可以使用

const string = 'This is :state :buttonName by :name';
const data = {
  buttonName: 'button link',
  state: 'Alabama',
  name: 'Arun'
}
const res = string.replace(/:([a-zA-Z]+)/g, (m, i) => i in data ? data[i] : m)
console.log(res)
Run Code Online (Sandbox Code Playgroud)