我的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));
}
答案 0 :(得分:1)
如果你关注的是clazz,那么将clazz
设置为null或空字符串就可以了。
var clazz = matches ? scope.$eval(matches[1]) : '';
但是对于compareWithExp
,当没有匹配时退出整个逻辑可能更好:
if ( ! matches ) return;