如何让替换单词非首字母为下划线的正则同时支持英文与西里尔字母?
解决方案:兼容英文与西里尔字母的单词替换
现有代码仅能处理英文单词,将单词中除首字母外的字符替换为下划线,但无法支持西里尔字母(如俄语):
var substitute_with = "_"; const regex = /\B\w/g; var result = text.replaceAll(regex, substitute_with);
示例测试文本:
Это текст-"рыба", часто используемый в печати и вэб-дизайне.
修改方案
核心是调整正则表达式,使其支持Unicode范围内的所有字母,修改后的代码如下:
const substitute_with = "_"; // 使用Unicode属性转义匹配任意语言字母,u标志启用Unicode模式 const regex = /(?<=\p{L})\p{L}/gu; const result = text.replaceAll(regex, substitute_with);
逻辑说明
\p{L}:Unicode属性转义,可匹配任意语言的字母(涵盖英文、西里尔字母等所有Unicode字母)(?<=\p{L}):正向回溯断言,确保当前匹配的字母前面已有一个字母(即排除单词的首字母)u标志:开启正则的Unicode模式,让引擎正确识别\p{L}这类Unicode属性语法
示例输出
处理示例文本后会得到:
Э_о т_хт-"р_б", ч_с_о и_з_л_у_е_м_й в п_ч_т_ и в_б-д_з_йн_.
内容的提问来源于stack exchange,提问作者Trts
相关产品推荐
相关产品推荐

