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' 标志。
我正在尝试检测文本中是否存在属于 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' 标志。