Rethinkdb过滤非匹配的正则表达式

时间:2018-04-11 16:41:04

标签: regex rethinkdb

我想找到与特定正则表达式模式不匹配的文档,但我在re2中看不到任何支持 - rethinkdb使用的正则表达式库(https://github.com/google/re2/wiki/Syntax)。此外,我尝试使用带有r.js()的服务器端javascript执行此操作,但我似乎无法正确提取语法,以便在嵌套字段中提取要匹配的字符串,其中每个键名都是字符串键。我在row [“key”]和row.key中得到了未定义的对象错误:

```
filter(r.js('(function(row){
 var re = /(?!(json|JSON))$/;
 return re.test(row.student_record.the_test);
})'))
```

1 个答案:

答案 0 :(得分:2)

r.js是最后的工具。另外,据我所知,JavaScript和RE2如何协同工作,因为/.../在JavaScript中是标准化的,所以应该通过特定对象进行一种绑定(如果RethinkDB甚至为r.js上下文提供任何内容,并且很可能/.../永远不能做RE2可以做的事情。)

如下:

r.db('test')
  .table('test')
  .filter(doc =>
    doc.hasFields({'student_record': { 'the_test': true }})
      .and(doc('student_record')('the_test').match('(json|JSON)$').not())
  ) // matches all documents that have $.student_record.the_test not matching the regexp

r.db('test')
  .table('test')
  .filter(doc =>
    doc.hasFields({'student_record': { 'the_test': true }})
      .and(doc('student_record')('the_test').match('(json|JSON)$'))
      .not()
  ) // matches even documents that do not have $.student_record.the_test

  • doc.hasFields({'student_record': { 'the_test': true }}) - 验证给定文档的JSON路径。
  • doc('student_record')('the_test').match('(json|JSON)$') - 检查$.student_record.test是否与正则表达式匹配。顺便问一下,你可能正在寻找'\\.(?:json|JSON)$'吗? (请参阅组前的转义点\.。)。
  • not() - 反转表达式结果。