在对象键中使用正则表达式子模式(使用.replace())

Using Regex Subpatterns in Object Keys (using .replace())

本文关键字:子模式 replace 正则表达式 使用 对象      更新时间:2023-09-26

我对。replace()的工作方式有一个疑问

我知道我们可以像这样在替换文本中使用子模式

var somestr="foobar";
var newstr = somestr.replace(/foo([a-zA-Z]*)/g,"bar$1")
alert(newstr) //"barbar"

然而,我想知道是否有可能在对象属性中使用子模式,就像这样。

var somestr = "foobar";
var someobj = {bar:'fuu',two:'uuf'}
var newstr = somestr.replace(/foo([a-zA-Z]*)/g, someobj["$1"])
alert(newstr) //"fuu" ?

我的预期结果是得到someobj'bar'性质,即"fuu",然而实际结果是undefined,这将使我相信这是不可能的。

我怎样才能完成类似的功能呢?也许你们中的一个JS大师可以解释一下这个问题。

这背后的真实目的是我有一个模板系统,它使用短标签来显示来自请求的JSON对象的数据块,我试图简化谁的代码。

不像这样,我添加了$1来显示失败:

var somestr = "foobar";
var someobj = {bar:'fuu',two:'uuf', $1: 'test'}
var newstr = somestr.replace(/foo([a-zA-Z]*)/g, someobj["$1"])
newstr; // "test";

但是这个也可以:

var somestr = "foobar";
var someobj = {bar:'fuu',two:'uuf', $1: 'test'}
var newstr = somestr.replace(/foo([a-zA-Z]*)/g, "$1")
someobj[newstr]; // fuu

或者更好,replace接受一个函数:

var somestr = "foobar";
var someobj = {bar:'fuu',two:'uuf', $1: 'test'}
var newstr = somestr.replace(/foo([a-zA-Z]*)/g, function () {
    return someobj[arguments[1]];
})
newstr; // fuu

你可以这样做:

var someString = "foobar";
var someObject= {bar:'fuu',two:'uuf'};
var re = /foo([a-zA-Z]*)/g;
if (re.test(someString)) {
    alert(someObject[RegExp.$1]);
}

看这里的小提琴,http://jsfiddle.net/nickyt/AjjjP

你也可以这样做alert(someObject[someString.replace(/foo([a-zA-Z]*)/g, "$1")]);,但问题是,如果$1中没有找到任何东西,你的对象会寻找一个空字符串键。我将继续使用上面的内容