在Object-Javascript中用respetive变量替换以“@”开头的文本
我编写了这段代码,试图重现我想在我的节点JSAPI中执行的操作。我有消息数组和valueList对象,我需要用@替换所有文本,而不是valueList对象中变量的名称在Object-Javascript中用respetive变量替换以“@”开头的文本,javascript,node.js,arrays,object,replace,Javascript,Node.js,Arrays,Object,Replace,我编写了这段代码,试图重现我想在我的节点JSAPI中执行的操作。我有消息数组和valueList对象,我需要用@替换所有文本,而不是valueList对象中变量的名称 const message = [ "Hi my name is @myname from @city", "Hi i'm a bot @botname from @city" ] const valueList = { myname: "Roger&qu
const message = [
"Hi my name is @myname from @city",
"Hi i'm a bot @botname from @city"
]
const valueList = {
myname: "Roger",
city: "Rio",
botname: "Re"
}
/** This is my trying */
const replacedText = message
.map((text) => text.replace("@myname",valueList.myname))
.map((text) => text.replace("@botname",valueList.botname))
.map((text) => text.replace("@city",valueList.city))
console.log(replacedText)
若我在valueList中再创建一个变量,我需要在消息中再添加一个.map,是否可以自动获取所有对象以替换所有消息?我正试着这么做,谢谢
Object.keys(valueList).forEach((key) => {
replacedText = message.replace('@'+key, valueList[key])
})
您还可以在valueList上使用reduce映射组合
您还可以在valueList上使用reduce map组合,您可以使用全局标志动态创建正则表达式,以便替换替换文本的多个实例示例:Hi my name是@city中的@myname@城市处于“状态” 常量消息=[ 嗨,我的名字是@city的@myname, 嗨,我是来自@city的机器人@botname ] 常量值列表={ 我的名字:罗杰, 城市:里约, 姓名:Re } //映射消息 const replacedText=message.maptext=>{ //映射要替换的键/值 return Object.keysvalueList.map //创建带有全局的regexp以替换多个(如果存在) key=>text.replacenew RegExp`@${key}`、'g',valueList[key] }
您可以使用全局标志动态创建正则表达式,以便替换替换文本的多个实例示例:Hi my name is@myname from@city@城市处于“状态” 常量消息=[ 嗨,我的名字是@city的@myname, 嗨,我是来自@city的机器人@botname ] 常量值列表={ 我的名字:罗杰, 城市:里约, 姓名:Re } //映射消息 const replacedText=message.maptext=>{ //映射要替换的键/值 return Object.keysvalueList.map //创建带有全局的regexp以替换多个(如果存在) key=>text.replacenew RegExp`@${key}`、'g',valueList[key] }
另一个选项是创建一个带有捕获组的动态正则表达式,并使用一个替代选项|连接Object.keysvalueList中的键并与函数一起使用 在replace函数中,可以使用组1的值(myname或myname或botname)向valueList对象创建索引 组装的正则表达式如下所示,并使用全局标志替换所有出现的正则表达式
@(myname|city|botname)\b
模式匹配:
@逐字匹配
myname | city | botname捕获组1,匹配替换代码中g1引用的任何备选方案
\b防止部分匹配的单词边界
常量消息=[
嗨,我的名字是@city的@myname,
嗨,我是来自@city的机器人@botname
]
常量值列表={
我的名字:罗杰,
城市:里约,
姓名:Re
}
const replacedText=message.maps=>
s、 替换
新的RegExp`@${Object.keysvalueList.join'|'}\\b`、'g',
_,g1=>valueList[g1]
;
console.logreplacedText另一个选项是创建一个带有捕获组的动态正则表达式,并使用另一个选项|连接Object.keysvalueList中的键并与函数一起使用 在replace函数中,可以使用组1的值(myname或myname或botname)向valueList对象创建索引 组装的正则表达式如下所示,并使用全局标志替换所有出现的正则表达式
@(myname|city|botname)\b
模式匹配:
@逐字匹配
myname | city | botname捕获组1,匹配替换代码中g1引用的任何备选方案
\b防止部分匹配的单词边界
常量消息=[
嗨,我的名字是@city的@myname,
嗨,我是来自@city的机器人@botname
]
常量值列表={
我的名字:罗杰,
城市:里约,
姓名:Re
}
const replacedText=message.maps=>
s、 替换
新的RegExp`@${Object.keysvalueList.join'|'}\\b`、'g',
_,g1=>valueList[g1]
;
这很聪明,我喜欢!这是非常聪明的,我喜欢它!