如何使用正则表达式避免在 unicode 重音后大写字母 [重复]
Posted
技术标签:
【中文标题】如何使用正则表达式避免在 unicode 重音后大写字母 [重复]【英文标题】:How to avoid capitalizing letters following unicode accents with regex [duplicate] 【发布时间】: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;
如何防止重音字符列表后出现大写?
【问题讨论】:
【参考方案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。以上是关于如何使用正则表达式避免在 unicode 重音后大写字母 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何匹配 perl 正则表达式 (regexp) 中的重音字符和波浪字符?
使用正则表达式剥离字符失败,使用带有变音符号,撇号,重音符号等的文字字符