我尝试使用此代码在空格或特殊字符(例如“-”)后的字符串中将每个非ASCII字符或简单字母大写,但这是行不通的:
userRouter.post('/ticket', userCtr.createTicket); // create a ticket
userRouter.patch('/ticket', userCtr.updateTicket); // update a ticket
userRouter.delete('/ticket', userCtr.deleteTicket); // delete a ticket
预期结果将是“Jean-Àris-SaÇa”,我怎么能做到这一点?
答案 0 :(得分:1)
您可以使用
console.log(
"jean-àris-sa ça".replace(/(-|\s+|^)(.)/g, function(_,$1,$2) {
return $1 + $2.toUpperCase();
} )
)
(-|\s+|^)(.)
模式将-
或1+个空格(或只是字符串位置的开头,一个空字符串)捕获到组1中,并将任何下一个字符捕获到组2中,并返回与该字符相同的字符串第2组中的字母变成大写。
由于您可能需要提高第一个字母的位置,同时降低同一单词中其余字母的位置,因此可能需要使用正则表达式来匹配所有字母。 XRegExp
库可在所有浏览器中为您工作:
var regex = XRegExp("(\\pL)(\\pL*)");
console.log( XRegExp.replace("jean-àRiS-sa çA", regex, function(_, $1, $2) {
return $1.toUpperCase() + $2.toLowerCase();
}, "all")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.2.0/xregexp-all.min.js"></script>
在支持ECMAScript 2018的最新Chrome版本中,您只需使用
console.log(
"jean-àRiS-sa çA".replace(/(\p{L})(\p{L}+)/gu,
(_, $1, $2) => $1.toUpperCase() + $2.toLowerCase())
);
\pL
或\p{L}
Unicode类别匹配任何字母。