JavaScript代码无法输出含指定亚美尼亚语单词的数组元素问题
问题解决:匹配非ASCII单词无输出的JavaScript代码修复
问题描述
需求是当sentencesRemovedPuncts数组中的元素包含单词“մի՛”时,输出sentences数组对应下标的原句子,但当前代码无任何输出:
var sentences = ["մի՛ գնար՝ ի տուն։", "մի անգամ, գեթ մի․․․։", "Զ՞ինչ մի՛թե է այս։"] var sentencesRemovedPuncts = ["մի՛ գնար ի տուն", "մի անգամ գեթ մի", "Զինչ միթե է այս"] let word = "մի՛" let key = new RegExp(`\b${word}\b`) for (let i = 0; i < sentencesRemovedPuncts.length; i++) { if (key.test(sentencesRemovedPuncts[i])) { console.log(sentences[i]) } }
问题原因
JavaScript原生的\b是ASCII单词边界,仅匹配[A-Za-z0-9_]这类ASCII字符与其他字符的边界。而“մի՛”属于亚美尼亚语字符,全是非ASCII范围,\b无法识别其作为单词的边界,导致正则匹配完全失败。
修复方案
方案1:直接检查字符串包含(简单场景)
如果不需要严格匹配整个单词,只是检查目标字符串是否存在,直接用includes方法即可:
var sentences = ["մի՛ գնար՝ ի տուն։", "մի անգամ, գեթ մի․․․։", "Զ՞ինչ մի՛թե է այս։"] var sentencesRemovedPuncts = ["մի՛ գնար ի տուն", "մի անգամ գեթ մի", "Զինչ միթե է այս"] let word = "մի՛" for (let i = 0; i < sentencesRemovedPuncts.length; i++) { if (sentencesRemovedPuncts[i].includes(word)) { console.log(sentences[i]) } }
输出结果:
մի՛ գնար՝ ի տուն։ Զ՞ինչ մի՛թե է այս։
方案2:Unicode单词边界(精确匹配场景)
如果需要严格匹配整个单词(避免部分字符匹配,比如防止“մի՛թե”被误判),可以使用Unicode属性类结合负向断言实现真正的单词边界,注意要添加正则的u标志以支持Unicode:
var sentences = ["մի՛ գնար՝ ի տուն։", "մի անգամ, գեթ մի․․․։", "Զ՞ինչ մի՛թե է այս։"] var sentencesRemovedPuncts = ["մի՛ գնար ի տուն", "մի անգամ գեթ մի", "Զինչ միթե է այս"] let word = "մի՛" // (?<!\p{L}) 表示前面不是Unicode字母;(?!\p{L}) 表示后面不是Unicode字母 let key = new RegExp(`(?<!\\p{L})${word}(?!\\p{L})`, 'u') for (let i = 0; i < sentencesRemovedPuncts.length; i++) { if (key.test(sentencesRemovedPuncts[i])) { console.log(sentences[i]) } }
输出结果:
մի՛ գնար՝ ի տուն։
内容的提问来源于stack exchange,提问作者user19846911
相关产品推荐
相关产品推荐

