Regex TypeError:无法读取null的属性“1”

时间:2016-08-31 03:32:29

标签: angular-ui-bootstrap

我的datepicker正则表达式尝试在null aray上进行匹配。我如何解决它?如果数组为null,则不确定clazz应该相等。我正在考虑一个简单的if(匹配[1]){etc}但我不确定如果匹配为null则该怎么做。 Clazz在代码中的其他地方使用过两次。我只是将clazz设置为null或零吗?

    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*$/;

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 个答案:

答案 0 :(得分:1)

如果你关注的是clazz,那么将clazz设置为null或空字符串就可以了。

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

但是对于compareWithExp,当没有匹配时退出整个逻辑可能更好:

if ( ! matches ) return;