3

几个小时和几天以来,我一直在寻找解决我的正则表达式问题的方法。

这是一个字符串示例,我尝试将第一个字母大写:

test-de'Maëly dUIJSENS

/\b[a-zA-Z]/g

我设法很好地隔离了第一个字母,但是带有重音的字母会给我带来问题,而且我的结果总是在重音字母之后给出一个大写字母:

Test-De'Maë L y Duijsens

我的预期结果如下:

Test-De'Maëly Duijsens

这是我的尝试:

function testcapital (){
  var xxx = capitalizePhrase("test-de'Maëly dUIJSENS")
}

function capitalizePhrase(phrase) {
  var accentedCharacters = "àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ";

  phrase  = phrase.toLowerCase()
  var reg = /\b[a-zA-Z]/g;
  function replace(firstLetters) {
    return firstLetters.toUpperCase();
  }
  capitalized = phrase.replace(reg, replace);
  return capitalized;
}

如何在重音字符列表之后防止大写?

4

1 回答 1

3

您可以将 unicode 字符放入一个字符类中,该类可用于负面的后视:

const capitalizePhrase = phrase => {
  const accentedChars = "àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ";
  const reg = new RegExp(`\\b(?<![${accentedChars}])([a-z])`, "g");
  return phrase.toLowerCase().replace(reg, m => m.toUpperCase());
};

console.log(capitalizePhrase("test-de'Maëly dUIJSENS"));

于 2020-06-14T19:18:46.477 回答