如何用JavaScript正则在孤立IPA字符后添加ɨ?正则修正需求
修正正则表达式实现IPA字符的指定替换需求
需求说明
当tʂ、tʂ'、ʂ、ʐ、ts、ts'、s这些IPA字符孤立出现(不与其他IPA字符相邻)时,在其右侧、数字之前添加字符ɨ,注意目标字符后均带有数字,且每行内容被/包裹。
原始代码
const input = `/ʊɔ3 yɛn2 tʂ2 tʂɑʊ3/ /ʊɔ3 mən5 tɕ'ʂ2 tʂɑʊ3/ /pu2 ʂ4 tʂə4 kə4/ /ʂ1/` const output = input.replace(/(\/|[ ])(tʂ|tʂ\'|ʂ|ʐ|ts|ts\'|s)\d([ ]|\/)/g, '$&ɨ') console.log(output)
当前输出
/ʊɔ3 yɛn2 tʂ2 ɨtʂɑʊ3/ /ʊɔ3 mən5 tɕ'ʂ2 tʂɑʊ3/ /pu2 ʂ4 ɨtʂə4 kə4/ /ʂ1/ɨ
期望输出
/ʊɔ3 yɛn2 tʂɨ2 tʂɑʊ3/ /ʊɔ3 mən5 tɕ'ʂ2 tʂɑʊ3/ /pu2 ʂɨ4 tʂə4 kə4/ /ʂɨ1/
修正方案
原正则的问题在于将目标字符+数字作为整体匹配后,把ɨ追加到了整个匹配串末尾,导致位置错误且边界处理异常。修正后的正则会拆分捕获目标字符和数字,将ɨ插入到两者之间:
const input = `/ʊɔ3 yɛn2 tʂ2 tʂɑʊ3/ /ʊɔ3 mən5 tɕ'ʂ2 tʂɑʊ3/ /pu2 ʂ4 tʂə4 kə4/ /ʂ1/` const output = input.replace(/(\/|\s)(tʂ|tʂ'|ʂ|ʐ|ts|ts'|s)(\d)(\s|\/)/g, '$1$2ɨ$3$4') console.log(output)
正则说明
(\/|\s):捕获前边界,匹配/或空格,确保目标字符是孤立的开头(tʂ|tʂ'|ʂ|ʐ|ts|ts'|s):捕获需要处理的IPA目标字符(\d):捕获目标字符后的数字(\s|\/):捕获后边界,匹配空格或/,确保目标字符后无其他IPA部件- 替换串
$1$2ɨ$3$4:将捕获的前边界、目标字符、插入的ɨ、数字、后边界拼接,实现字符+ɨ+数字的正确格式
内容的提问来源于stack exchange,提问作者wyc
相关产品推荐
相关产品推荐

