我的朋友帮我在AngularJS中编写了一个自定义过滤器,以帮助我将我的一个数组中的一个值大写。但没有时间向我解释他做了什么。只是想知道是否有人可以帮助我理解这段代码:
.filter('capitalizetext', function() {
return function(name) {
name = ( name === undefined || name === null ) ? '' : name;
return name.toString().toLowerCase().replace( /\b([a-z])/g, function(change) {
return change.toUpperCase();
});
};
})
我不明白的第一部分是:
name = ( name === undefined || name === null ) ? '' : name;
他为什么这样做?
第二部分我不明白是:
return name.toString().toLowerCase().replace( /\b([a-z])/g,
我知道他正在将字符串更改为全部小写,这样他最终可以将其转换为大写字符串,但这是什么:( /\b([a-z])/g
并没有真正遵循他在那里所做的事情。
请帮忙!
答案 0 :(得分:3)
name = ( name === undefined || name === null ) ? '' : name;
这确保name
在以后使用时永远不会为null或未定义。
return name.toString().toLowerCase().replace( /\b([a-z])/g, function(change) {
return change.toUpperCase();
});
};
首先将所有内容更改为小写,并将每个单词的第一个字符替换为大写字母。 \b
is a boundary matcher:
E.g。假设name = "capItalIze me"
然后
name.toString().toLowerCase(); // => name = "capitalize me"
/\b([a-z])/g // means find first letter of every word so will match "c" and "m"
replace( /\b([a-z])/g, function(change) {return change.toUpperCase();});} // change 'c' to 'C' and 'm' to 'M';
答案 1 :(得分:2)
在第一部分:
name = ( name === undefined || name === null ) ? '' : name;
他检查字符串是否在他的“定义”中是真实的,检查它是否未定义或为null(因为null / undefined字符串可能引发错误),否则如果是,则将其设置为空字符串避免错误。
第二部分他使用regex
表达式将字符串修改为过滤器规范。您可以阅读regex
表达式here。 我不是很精通正则表达式,但是当我将所有字符转换为小写时,我认为你是在正确的轨道上,检查上面的注释以获取正则表达式的解释,但是,如果是这种情况,他可以这样做......
string = string.toLowerCase()
string = string.substr(0, 1).toUpperCase() + string.substr(1);