【发布时间】:2019-02-18 05:43:48
【问题描述】:
我尝试将 mongodb(3.4 版)$regex 运算符与一系列 unicode 字符一起使用。但我无法让它工作(我正在使用 robomongo 来测试它)。
我尝试了以下方法:
db.getCollection('myCollection').find(
{
"field": {
$regex: /[\x{20000}-\x{2A6D6}]/
}
})
输出如下错误:
错误:第 4 行:无效的正则表达式
我设置的正则表达式必须匹配 CJK 统一表意文字扩展 B 的所有字符。
它似乎与使用 CJK unicode 十六进制值无关,因为我使用更简单的正则表达式也有同样的错误,例如
$regex: /[\x{0}-\x{1}]/
你能帮我理解为什么我的正则表达式不起作用吗?
【问题讨论】:
-
该模式不应该用 JS 正则表达式解析吗?试试
/(?:[\uD840-\uD868][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6])/等效项。或者,检查它是否支持 ES6:/[\u{20000}-\u{2A6D6}]/u -
/[\u{20000}-\u{2A6D6}]/u产生错误(u 不是有效的正则表达式标志),没有u,错误是正则表达式无效 -
如果使用字符串文字会怎样?
$regex: '[\x{0}-\x{1}]' -
/(?:[\uD840-\uD868][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6])/被 mongo 接受但没有产生结果(应该是,考虑到我拥有的数据集),我仍然想知道为什么 -
@revo
$regex: '[\x{0}-\x{1}]'产生相同的错误“无效的正则表达式”
标签: regex mongodb unicode pcre cjk