是否可以使用regexp作为对象属性
Is it possible to use regexp as object property?
假设我有以下对象:
var map = {};
map[/^'/e'/(?:([0-9a-f]{24}))'/rename'/?$/] = "/e/531e8942711f533cf0000019/rename";
上面的对象正在将正则表达式映射到测试值。我需要做一些像下面这样的东西:
for (var i in map) {
if (map.hasOwnProperty(i) && i.test(map[i])) {
console.log('It works');
}
}
但是上面的代码不起作用。怎么了?
你可以这样做:
var map = {};
map["^/e/(?:([0-9a-f]{24}))/rename/?$"] = "/e/531e8942711f533cf0000019/rename";
for (var i in map) {
if (map.hasOwnProperty(i) && (new RegExp(i)).test(map[i])) {
console.log('It works');
}
}
// prints: It works
可以;然而,需要注意的一点是,正则表达式在用作属性名之前首先被强制转换为字符串。
所以当你想再次使用属性名作为表达式时,你必须先"水合物"它:
for (var i in map) {
if (map.hasOwnProperty(i)) {
var re = eval(i);
if (re.test(map[i])) {
console.log('It works');
}
}
}
但是,我建议使用数组来防止这种"神奇的"来回转换:
var map = [];
map.push([/^'/e'/(?:([0-9a-f]{24}))'/rename'/?$/, "/e/531e8942711f533cf0000019/rename"]);
map.forEach(function(info) {
if (info[0].match(info[1])) {
console.log('it works');
}
});
相关文章:
- 如何从对象的原型方法访问JavaScript对象属性
- 如何将数组项添加到对象属性中
- 设置嵌套对象属性的更好方法
- JavaScript管理具有重复属性名称的对象属性
- 如何使用element.myobj.prop等具有对象属性的元素
- 如何使用(this)访问Angular 2 http rxjs catch函数中的对象属性
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 如何在AngularJS工厂中正确声明对象属性
- 如何使用object.assign()从其他对象引用基本对象属性
- 使用XPath样式访问Javascript JSON对象属性
- 将javascript对象(属性+值)合并到一个对象中
- 数组:使对象属性成为数组键
- 无法从JavaScript中的函数调用对象属性
- Google Closure Advanced |无法识别对象属性|动态属性
- Javascript从匿名函数访问外部对象属性
- 从函数更改对象属性
- 如何从字符串变量访问对象属性
- 从嵌套对象属性中获取排除某个值的最高值
- 在Aurelia computeds中,当设置依赖关系时,如何声明对对象属性的依赖关系
- 传递数量不确定的可能嵌套的对象属性