我现在正在获取location.path url,并将url显示为我的标题,如果我有一个像“香蕉和苹果”的标题,我不想要“和”,而只返回“香蕉和苹果”,我如何才能使它成为驼峰?
我发现了这段javascript代码,它返回了我的标题“香蕉和苹果”。
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, ' '));发布于 2016-08-09 01:14:56
有一个基于单个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;});
}发布于 2016-08-09 00:17:14
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));
发布于 2016-08-09 00:58:57
除非你求助于Nick Bull的解决方案或类似的解决方案,否则在任何计算机语言中都还没有一种连贯的方法来做到这一点。
问题是计算机程序没有意识到“banana”和“and”是不同类型的词,比如:“banana”是一个名词,“and”是一个连词。
你要么必须利用你对字符串中可能存在的东西的知识(就像Nick Bull的解决方案一样),要么接受一个更简单的解决方案,你可能只需将第一个字母大写并承担后果。
(我知道我会选择哪一个)
https://stackoverflow.com/questions/38833945
复制相似问题