【问题标题】:How to avoid capitalizing letters following unicode accents with regex [duplicate]如何使用正则表达式避免在 unicode 重音后大写字母 [重复]
【发布时间】:2020-10-04 04:46:42
【问题描述】:

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

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

test-de'Maëly dUIJSENS

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

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

Test-De'MaëLy 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;
}

如何防止重音字符列表后出现大写?

【问题讨论】:

    标签: javascript regex unicode accent-sensitive


    【解决方案1】:

    您可以将 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"));

    【讨论】:

    • 这里不需要u修饰符。它没有做任何特别的事情。 \b 仍然只能识别 ASCII。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    相关资源
    最近更新 更多