我目前正在获取location.path
网址,并将网址显示为我的标题,如果我有一个类似“香蕉和苹果”的标题,我怎么能让它成为camelcase我不想要“和”成为“和”,而只是回归“香蕉和苹果”
我找到了这个javascript代码,并将其标题恢复为“Banana And Apple”。
function camelize(str) {
return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function(match, index) {
if (+match === 0) return " "; // or if (/\s+/.test(match)) for white spaces
return index == 0 ? match.toLowerCase() : match.toUpperCase();
});
}
我将(/)和( - )替换为空格
this.title = camelize(lastPartOfUrl.replace(/\/|\-/g, ' '));
或
var cleanUrl = lastPartOfUrl.replace(/\/-/g, ' ');
this.title = camelize(cleanUrl.replace(/-/g, ' '));
答案 0 :(得分:1)
基于单一RegEx的解决方案更短。
function camelCase(txt){
var lower='and,or,a,in,on,'; //stop-words
return txt //.split(/\/-/).join(' ')
.toLowerCase().replace(/(\b.)(\S*\b)(\s|$)/g,
function(m/*full match*/,
n/*(\b.)*/,
p/*(\S*\b)*/,
q/*(\s|$)*/){
//console.log(n,p);
return (lower.indexOf(n+p+',')===-1?
n.toUpperCase() : n) + p + q;});
}
答案 1 :(得分:0)
String.prototype.capitalizeFirstLetter = function() {
return this.charAt(0).toUpperCase() + this.slice(1);
};
String.prototype.toCamelCase = function() {
return this.split(" ").reduce((previousValue, currentValue, currentIndex) => (currentIndex == 1) ?
previousValue.toLowerCase() + currentValue.capitalizeFirstLetter() :
previousValue + currentValue.capitalizeFirstLetter()
);
};
alert("Banana And Apples".toCamelCase())
编辑:大写单词,除了一个单词数组变为小写:
function titleCaseExcept(value, lowerCaseArray, upperCaseArray, isCaseSensitive) {
var str = value.replace(/([^\W_]+[^\s-]*) */g, (txt) =>
txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()
);
var regexFlags = (isCaseSensitive) ? 'gi' : 'g';
// Lower case words
lowerCaseArray.forEach( (element) =>
str = str.replace(new RegExp('\\s' + element + '\\s', regexFlags),
(text) => text.toLowerCase()
)
);
// Upper case words
upperCaseArray.forEach( (element) =>
str = str.replace(new RegExp('\\b' + element + '\\b', regexFlags),
(text) => text.toUpperCase()
)
);
return str;
}
// Find any of these, in any case, to replace to lowercase
lowers = ['A', 'an', 'THE', 'and', 'But', 'oR', 'For', 'Nor', 'As', 'At',
'By', 'For', 'From', 'In', 'Into', 'Near', 'Of', 'On', 'Onto', 'To', 'With'];
// Find any of these, in any case, to replace to uppercase
uppers = ['id', 'tv'];
// Last parameter is true for case-insensitive arrays
console.log(upperCaseExcept("Bananas And Apples In Some Place On Tv", lowers, uppers, true));
答案 2 :(得分:0)
除非你诉诸Nick Bull的解决方案或类似方法,否则在任何计算机语言中都没有一种连贯的方法。
问题是计算机程序不认识'香蕉'是一种与'和'不同的单词 - 即:'香蕉'是名词,'和'是一种结合。
您必须使用您对字符串中可能包含的内容的知识(与Nick Bull的解决方案一样),或接受一个更简单的解决方案,您可能只需将第一个字母大写并承担后果。
(我知道我选择哪个)