2016-08-31 2 views
0

Мое регулярное выражение datepicker пытается совпадения на null-aray. Как это исправить? Не уверен, какой clazz должен равняться, если массив равен null. Я думаю простую if (matches [1]) {etc}, но я не уверен, что делать, если совпадение равно null. Clazz используется где-то еще дважды в коде. Я просто установил clazz на нуль или ноль?Regex TypeError: Невозможно прочитать свойство '1' из null

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

Edit: Вот где они используют 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*$/; 

Double Edit:

Вот вся функция

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 на пустую или пустую строку должна делать, если clazz - все, что вас беспокоит.

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

Но с compareWithExp, было бы лучше, чтобы выйти из всей логики, когда нет матча:

if (! matches) return; 
Смежные вопросы