为什么我不能这样做?
var obj = {
prop1:"a",
prop2:"b",
test1: new RegExp(this.prop1),
test2: new RegExp(this.prop2),
init: function(){
if(this.test1.test('apple')){
//code will be executed
}
if(this.test1.test('banana')){
//code will be executed
}
if(this.test2.test('apple')){
//code will be executed
}
if(this.test2.test('banana')){
//code will be executed
}
}
};
obj.init();
测试将始终返回true,因为它是/(?:)/
。如何解决这个问题?
答案 0 :(得分:2)
好的,我必须告诉你内部发生的事情:prop1中包含的字符串不适用于RegExp部分,因此形成的正则表达式为//
,可以匹配apple和banana
答案 1 :(得分:2)
改为使用函数:
var obj = {
prop1:"a",
prop2:"b",
test1: function()
{
return new RegExp(this.prop1);
},
test2: function()
{
return new RegExp(this.prop2);
},
init: function(){
if(this.test1().test('apple')){
console.log('1');
}
if(this.test1().test('banana')){
console.log('2');
}
if(this.test2().test('apple')){
console.log('3');
}
if(this.test2().test('banana')){
console.log('4');
}
}
};
obj.init();