正则表达式修正:处理孟加拉语字符时保留首字符替换非字母数字为下划线
解决孟加拉语字符替换异常的正则表达式问题
问题出在原正则未覆盖Unicode组合标记(\p{M}):孟加拉语的চার并非单一Unicode字符,而是由চ(U+099A,字母)、া(U+09BE,非间距组合标记)、র(U+09B0,字母)组成。原正则/(?!^)[^\p{L}\p{N}]+/gu的排除集仅包含字母(\p{L})和数字(\p{N}),会把组合标记া判定为“非字母数字字符”并替换成下划线,导致异常输出。
修正后的正则需要将组合标记纳入保留范围:
text.replace(/(?!^)[^\p{L}\p{N}\p{M}]+/gu, '_')
关键说明
\p{M}:匹配所有Unicode标记字符,包含孟加拉语元音附标这类非间距组合标记,确保字母与附属标记被视为整体保留(?!^):维持原逻辑,首个字符不受替换规则影响/gu:全局匹配+Unicode模式,保证多语言字符的正确识别
测试孟加拉语字符চার时,该正则会完整保留字符组合,不会插入多余下划线。
内容的提问来源于stack exchange,提问作者React_Coder
相关产品推荐
相关产品推荐

