2014-03-12 46 views
0

为什么我不能做这样的事情?Javascript RegExp as property

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,因为它是/(?:)/。如何解决这个问题?

http://jsfiddle.net/jk8MK/

+1

正是你想做什么?你的问题是什么 ? – tnanoba

+0

你到底想做什么?你的问题是什么 ?好友 – Neel

+0

@Neel哦,我错过了'buddy'哈哈 – tnanoba

回答

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(); 

http://jsfiddle.net/jk8MK/2/

+0

而将test1和test2另存为属性的方法是使它们在obj中为null,然后在init()中分配regexp。函数... –

+0

或者如果你不需要test1/2作为对象属性,你可以使用局部变量:http://jsfiddle.net/jk8MK/3/ – tarmaq

2

好吧,我必须告诉你什么内部发生:包含在PROP1字符串不是可用于正则表达式的部分所形成的正则表达式是//它可以同时苹果和香蕉