2016-08-31 30 views
0

私のdatepicker正規表現は、ヌルアレイで一致を試行しています。どうすれば修正できますか?配列がnullの場合、どのクラスが等しいかどうか不明です。私は単純なif(matches [1]){etc}を考えていますが、matchがnullの場合はどうすればよいか分かりません。 Clazzはコード内で別の場所で2回使用されます。 clazzをゼロまたはゼロに設定するだけですか?Regex TypeError:ヌルのプロパティ '1'を読み取ることができません。

var matches = exp.match(IS_REGEXP); 
    var clazz = scope.$eval(matches[1]); 

は編集:彼らはclazz

if (data.lastActivated !== newActivated) { 
     if (data.lastActivated) { 
     $animate.removeClass(data.lastActivated.element, clazz); 
     } 
     if (newActivated) { 
     $animate.addClass(newActivated.element, clazz); 
     } 
     data.lastActivated = newActivated; 
    } 

を使用するのはここ。ここIS_REGEXP

     11111111   22222222 
    var IS_REGEXP = /^\s*([\s\S]+?)\s+for\s+([\s\S]+?)\s*$/; 

ダブル編集だだ:

ここでは全体の機能が

function addForExp(exp, scope) { 
    var matches = exp.match(IS_REGEXP); 

     var clazz = scope.$eval(matches[1]); 
    var compareWithExp = matches[2]; 
    var data = expToData[exp]; 
    if (!data) { 
     var watchFn = function(compareWithVal) { 
     var newActivated = null; 
     instances.some(function(instance) { 
      var thisVal = instance.scope.$eval(onExp); 
      if (thisVal === compareWithVal) { 
      newActivated = instance; 
      return true; 
      } 
     }); 
     if (data.lastActivated !== newActivated) { 
      if (data.lastActivated) { 
      $animate.removeClass(data.lastActivated.element, clazz); 
      } 
      if (newActivated) { 
      $animate.addClass(newActivated.element, clazz); 
      } 
      data.lastActivated = newActivated; 
     } 
     }; 
     expToData[exp] = data = { 
     lastActivated: null, 
     scope: scope, 
     watchFn: watchFn, 
     compareWithExp: compareWithExp, 
     watcher: scope.$watch(compareWithExp, watchFn) 
     }; 
    } 
    data.watchFn(scope.$eval(compareWithExp)); 
    } 
です

答えて

1

clazzをnullまたは空の文字列に設定するのは、clazzがすべて問題である場合です。

var clazz = matches ? scope.$eval(matches[1]) : ''; 

しかしcompareWithExpで、一致しないとき、全体のロジックを終了した方がよいかもしれません:

if (! matches) return; 
関連する問題