我正在使用下面的过滤器将字符串转换为驼峰式大小写。除此之外,我不希望将包含字母数字字符的字符串转换为驼峰式大小写。
例如:
如果输入是“HELLO I AM INDIA1237”
输出必须是“你好,我是 INDIA1237”
我的过滤器如下:
angular.module('app')
.filter('titleCase', function() {
return function(input) {
input = input || '';
input = input.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); //convert to camelcase
return input.replace(/[A-Za-z0-9 ]/, function(txt){return txt.toUpperCase();}); //retain alphanumeric string in uppercase
};
});
第二个条件似乎不起作用。谁能帮忙。
最佳答案
您的正则表达式不正确。
\w
匹配字母数字字符,因此您的第一个正则表达式不应使用该规则。你可能想要:/[A-Za-z]+/
您的第二个正则表达式有两处错误。首先,它只匹配一个字符。其次,它将始终匹配第一个所做的相同事情。
您需要一个仅匹配具有数字的单词的正则表达式。所以你需要这样的东西:/[A-Za-z]+[0-9][A-Za-z]*/
。这将匹配一个或多个字母,后跟至少一个数字,然后是零个或多个字母或数字。如果这些词总是以数字结尾,那么您可以将其简化为 /[A-Za-z]+[0-9]+/
。
关于javascript - Angular 中的单词替换过滤器的正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34305387/