JS中匹配以重音字符结尾的单词问题求助
解决JS正则匹配以重音字符结尾单词的问题
原代码的问题在于\w仅匹配ASCII字母、数字和下划线,无法识别带重音的Unicode字母,导致正则在遇到重音字符时提前截断,只能匹配到单词的前半部分(比如ré、faç)。同时,\b作为单词边界,是基于\w的规则判断,对非ASCII字符的边界识别不准确。
修正方案
使用Unicode属性类\p{L}匹配所有Unicode字母(包括带重音的),并配合环视断言替代\b来准确判断单词边界,同时开启正则的u(Unicode)模式。
匹配以重音字符结尾的单词
const text = 'aztec, résumé, façade, and azure'; const words = text.match(/(?<!\p{L})\p{L}*[éèêëáàâäíìîïóòôöúùûüç](?!\p{L})/gu); console.log(words); // 输出: ["résumé"]
若需求为包含重音字符的单词(非仅结尾)
如果实际需要找出所有包含重音字符的单词,可调整正则如下:
const text = 'aztec, résumé, façade, and azure'; const words = text.match(/(?<!\p{L})\p{L}*[éèêëáàâäíìîïóòôöúùûüç]\p{L}*(?!\p{L})/gu); console.log(words); // 输出: ["résumé", "façade"]
内容的提问来源于stack exchange,提问作者MarioCha
相关产品推荐
相关产品推荐

