Javascript RegExp作为属性

时间:2014-03-12 09:53:29

标签: javascript regex

为什么我不能这样做?

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/

2 个答案:

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

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