尝试执行正则表达式替换时遇到以下问题:
这是我的字符串和正则表达式:
var content = "This is the city of {{city}}, located in the county of {{county}} and the state of {{state}}"
content.replace(/\{\{([a-zA-Z0-9]*)\}\}/g, '$1')
“这是城市,位于县城和州”
这是我的正则表达式替换的上下文对象:
var context = {city: "Abanda", county: "Chambers County", state: "Alabama"}
content.replace(/\{\{([a-zA-Z0-9]*)\}\}/g, context['$1'])
“这是未定义的城市,位于未定义的县和未定义的状态”
为什么我的正则表达式替换为undefined
失败?我正在关注MDN的正则表达式替换和匹配文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#special-capturing-parentheses
在调试此问题时,我得到以下内容,强调在访问regex replace方法中的对象属性时可能存在问题:
content.replace(/\{\{([a-zA-Z0-9]*)\}\}/g, '$1')
“这是城市,位于县城和州”
content.replace(/\{\{([a-zA-Z0-9]*)\}\}/g, context)
这是[object Object]的城市,位于[object Object]的县和[object Object]的状态
任何人都可以解释一下吗?
答案 0 :(得分:4)
context['$1']
未定义;您的$1
对象上没有名为context
的属性。
您可以提供回调函数作为String.prototype.replace(pattern, callback)
的第二个参数,而不是静态替换值。
将为每个匹配调用回调函数...接收匹配的文本和任何捕获组值作为参数。您可以根据这些值进行处理,并在上下文中返回替换值。
var content = "This is the city of {{city}}, located in the county of {{county}} and the state of {{state}}";
var context = {
city: "Abanda",
county: "Chambers County",
state: "Alabama"
};
var output = content.replace(/\{\{([a-z0-9]+)\}\}/gi, (match, key) => context[key]);
console.log(output);