我的用户将提交的表单中有一个title
字符串。我想以任何方式编写title
,并将其格式化为标题案例,我认为这是最友好的阅读方式。
alexis Sanchez -> Alexis Sanchez
sanchez's ball -> Sanchez's Ball
sanchez and co -> Sanchez and Co
我还想像“和”或“或”这样的词,并将它们作为小写,如上所示。这可能吗?
此外,在某些情况下,我想取这个title
并过滤它,以便忽略任何特殊字符,如撇号,并用破折号分隔。这将用于网址(即.com/sanchezs-ball
)。
alexis Sanchez -> alexis-sanchez
ALEXIS Sanchez -> alexis-sanchez
sanchez's ball -> sanchezs-ball
我已经创建了两个功能,几乎可以做到这一点。我只是需要一些建议来调整它们以使它们达到我想要的格式。
这一个接受我的title
并将其转换为类似URL的字符串。这可以改进/缩短吗?
function hashifyString(dirtyString) {
var title = dirtyString
.replace(/[^a-z0-9\s]/gi, '')
.replace(/\b\w+/g,function(s){return s.substr(0).toLowerCase();})
.replace(/[_\s]/g, '-');
return title;
}
我需要一些关于如何改进这个的建议,所以它会注意“和”或“或”并将这两个单词保持小写,同时保留字符串标题的其余部分?
function beautifyString(dirtyString) {
var string = dirtyString
.replace(/[^a-z0-9\s]/gi, '')
.replace(/\b\w+/g,function(s){return s.charAt(0).toUpperCase() + s.substr(1).toLowerCase();})
return string;
}
我希望这是有道理的。任何帮助表示赞赏。提前谢谢!
答案 0 :(得分:1)
首先,让我们简单地创建一个inArray
函数。
function inArray(val, ary){
for(var i=0,l=ary.length; i<l; i++){
if(ary[i] === val){
return true;
}
}
return false;
}
现在我们需要创建一个使整个String小写的函数,这样我们只能将每个单词中的第一个字母大写。这可以通过在' '
上拆分小写字符串来完成。接下来,我们遍历.split(' ')
的结果,测试它是否是exceptions
数组中的一个单词。如果是这样,我们不会将其资本化,否则我们会这样做。 .join(' ')
我们' '
.split(' ')
上的所有内容都会function ucFirstWord(str, exceptions){
var st = str.toLowerCase().split(' '), r = [];
for(var i=0,l=st.length; i<l; i++){
var s = st[i];
var x = inArray(s, exceptions) ? s : s.charAt(0).toUpperCase()+s.substring(1);
r.push(x);
}
return r.join(' ');
}
,并返回结果。
function lcHyphenize(str){
return str.toLowerCase().replace(' ', '-');
}
这个功能应该是不言自明的。
var ucString = ucFirstWord(yourStringVar, ['the', 'and', 'then', 'but', 'or', 'yet']);
var hzString = lcHyphenize(yourStringVar);
用法:
{{1}}
答案 1 :(得分:0)
((?:^|\s)[a-z])(?!nd\b|r\b)
您可以尝试使用$1.upper()
或其他内容来尝试此正则表达式。这不会选择and
或or
。
参见演示。