如何使用正则表达式匹配对象键并替换其值?

时间:2018-04-10 15:03:50

标签: javascript javascript-objects

我仍然是Javascript的新手,我不完全确定如何解决这个问题。

我希望它与关键字段匹配,并将其替换为其值。

const state = {
"NY": "New York"
}

你住在纽约你住在纽约

所有州的名单都会很长,所以我想我必须使用对象。 任何帮助,将不胜感激!提前谢谢!

编辑>>>

非常感谢那些回复的人! 我在这里列出了美国,加拿大和墨西哥所有州的名单: https://gist.github.com/PepperAddict/b8c6c80af4a17908fd98378b4375047e

使用提供的代码,我可以将它们全部更改为全名。

谢谢谢谢谢谢你!

4 个答案:

答案 0 :(得分:1)

您不需要正则表达式,请使用对象state

中的键
Object.keys(state).forEach(k => str = str.replace(k, state[k]));

const state = { "NY": "New York" };
var str = "You live in NY";

Object.keys(state).forEach(k => str = str.replace(k, state[k]));
console.log(str);

使用正则表达式替换整组匹配项:

const state = { "NY": "New York" };
var str = "You live in NY and again in NY";

Object.keys(state).forEach(k => str = str.replace(new RegExp(`\\b${k}\\b`, 'g'), state[k]));
console.log(str);

答案 1 :(得分:1)

我们可以使用模板文字和地图它将返回一个数组,然后你可以做你想要的。

const state = {
"NY": "New York"
}
console.log(Object.keys(state).map(s => `You live in ${state[s]}`))

如果您打算与用户进行此操作,例如

const state = {
"NY": "New York"
}
const user = {
 name: "joe",
 state: "NY",
 liveIn: () => `You live in ${state[user.state]}`
}
console.log(user.liveIn())

答案 2 :(得分:1)

如果您确定最后一个字是key。然后,您可以通过以下方式跳过 foreach

const state = {
"NY": "New York"
}

var a = "You live in NY";

b = a.split(" ");

b = b[b.length - 1];


a.replace(b, state[b]);

Console.log(a); 

<强>输出

"You live in New York"

答案 3 :(得分:1)

&#13;
&#13;
const states = {
  "CA": "California",
  "NY": "New York"
}

var input = "I'm from CA, thinking of moving to NY but not sure, I still really like CA."

var regexStr = Object.keys(states).join("|")
var statesRgx = new RegExp(`\\b(${regexStr})\\b`, 'g')
console.log(statesRgx)
function stateReplace(str){
  return str.replace(statesRgx, val => states[val])
}

console.log(stateReplace(input))
&#13;
&#13;
&#13;