正则表达式:在某些特殊字符后大写非ASCII字符

时间:2019-08-26 08:00:39

标签: javascript regex

我尝试使用此代码在空格或特殊字符(例如“-”)后的字符串中将每个非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”,我怎么能做到这一点?

1 个答案:

答案 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类别匹配任何字母。