“标题案例”的Javascript正则表达式法语名称证明

时间:2018-01-19 16:20:21

标签: javascript regex

我找到了一个很好的RegExp来将“小写名称”转换为“标题案例名称”,但我注意到它无法正常使用像“Jean-Marie”这样的法语名称,它应该保留并且不会被转换进入“让 - 玛丽”等等。

所以,这里是使用RegExp的整个函数:

function titleCase(source) {
    return source.replace(/\w\S*/g, function(txt) {
        return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
    });
}

所以,问题是:如何修改RegExp以保护法语名称?

非常感谢您的答案!

2 个答案:

答案 0 :(得分:1)

这很有效。有关详细信息refer this

以下正则表达式也适用于正常情况。 vignesh raja = Vignesh Raja



var name = "vignesh-raja";
name = name.replace(/\b\w+/g, function(str) {
  return str.charAt(0).toUpperCase() + str.substr(1);
});
console.log(name);




答案 1 :(得分:0)

replace方法可以将函数作为具有多个参数的第二个参数。

来自文档:

p1, p2, ...

  

第n个带括号的子匹配字符串,提供了第一个参数   replace()是一个RegExp对象。 (对应上面的1美元,2美元等。)   例如,如果给出了/(\ a +)(\ b +)/,则p1是\ a +的匹配,并且   p2代表\ b +。

你可以做的是使用像(\w)(\w+(?:-\w+)*)这样的正则表达式,它将带有连字符的单词匹配为1个单词。然后你可以捕获第一组中的第一个字符,以及第二组中匹配的其余部分。

然后使用toUpperCase转换该字符并返回连接名称。

例如:



function titleCase(source) {
  return source.replace(/(\w)(\w+(?:-\w+)*)/g, function(txt, p1, p2) {
    return p1.toUpperCase() + p2.toLowerCase();
  });
}

var titles = [
  "lower case name",
  "Jean-Marie",
  "JEAN-MARIE",
  "tEST TEST-TEST tesT"
];
for (var i = 0; i < titles.length; i++) {
  console.log(titles[i] + " ---> " + titleCase(titles[i]));
}
&#13;
&#13;
&#13;

注意

\w用于名称匹配[A-Za-z0-9_]