JavaScript 中的正则表达式匹配没有单词边界的书写系统

Regex in JavaScript to match writing systems without word boundaries

我正在尝试检测文本中是否存在属于 writing system of a language without word boundaries 的字符。 根据维基百科,这些书写系统如下(我添加了 ISO 639-2 或 639-3 代码)

Burmese  MY
Chinese ZH
Japanese JA
S'gaw Karen KAR
Khmer KM
Lao LP
ʼPhags-pa PHAG
Pwo Karen PWO
S'gaw Karen KAR
Tai Tham LANA
Thai TH
Tibetan BO

Chinese 的情况下,我正在为 Han 书写系统使用特定的正则表达式:

HAN_REGEX = /[\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DB5\u4E00-\u9FD5\uF900-\uFA6D\uFA70-\uFAD9]/;

相当于\p{Han}。中文象形文字的另一种解决方案是直接使用

let regexp = /\p{sc=Han}/gu;

假设给定 Kanji Unicode Table,文本中要检测 JA 的字符集范围是 this one:

KANJI_REGEX = /[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/

但是其他书写系统呢? charset range 是唯一的方法吗?

这不会处理所有情况,因为我似乎无法获得关于如何识别 scriptio continua 的良好参考,但它应该让你大部分都在那里。

let regex = new RegExp(/[\p{Script_Extensions=Mymr}\p{Script_Extensions=Han}\p{Script_Extensions=Hira}\p{Script_Extensions=Kana}\p{Script_Extensions=Bopo}\p{Script=Khmer}\p{Script=Lao}\p{Script_Extensions=Phag}\p{Script=Tai_Tham}\p{Script=Thai}\p{Script=Tibetan}]/u)

Script_Extensions 将包括脚本的所有扩展字符以及基本字符,因此您通常最好尽可能使用 Script_Extensions。

  • \p{Script_Extensions=Mymr} 应该匹配缅甸文字中的任何字符(这是缅甸语、S'gaw Karen 和 Pwo Karen 似乎映射到的字符)
  • \p{Script_Extensions=Han} 应匹配汉字或汉字字符
  • \p{Script_Extensions=Bopo}应该匹配Bopomofo字符(因为Hanb是Han+Bopo但是unicode没有组合脚本,这应该匹配其他汉字)
  • \p{Script_Extensions=Hira} 应该匹配任何平假名字符
  • \p{Script_Extensions=Kana} 应该匹配任何片假名字符
  • \p{Script=Khmer} 应匹配高棉文字中的字符
  • \p{Script=Lao} 应匹配老挝脚本中的字符
  • \p{Script_Extensions=Phag} 应该匹配 'Phags-pa 脚本中的字符
  • \p{Script=Tai_Tham} 应该匹配 Tai Tham 脚本中的字符
  • \p{Script=Thai} 应匹配泰语脚本中的字符
  • \p{Script=Tibetan} 应匹配藏文字符

并且由于没有设置 unicode 标志就无法使用 unicode 属性 转义,因此请务必记住传递 'u' 标志。