Regex 如何使用正则表达式查找指定字符串中出现的匹配项?
我有一个独特的情况,我需要查询mongo数据库,以查找文本正文中出现的人的姓名。查询必须指定文本体,并查找具有文本体中出现的值的记录。如何使用正则表达式实现这一点 我需要编写一个与此匹配的查询:Regex 如何使用正则表达式查找指定字符串中出现的匹配项?,regex,mongodb,Regex,Mongodb,我有一个独特的情况,我需要查询mongo数据库,以查找文本正文中出现的人的姓名。查询必须指定文本体,并查找具有文本体中出现的值的记录。如何使用正则表达式实现这一点 我需要编写一个与此匹配的查询: /乔纳森是个帅哥 问题是“test”中的文本是mongo字段的值,因此必须编写此查询,以便将文本体作为输入提供,并且它匹配出现在文本体中(是文本体的子字符串)的名称 一个更具体的例子: db.test.find(); {“_id”:ObjectId(“547e9b79f2b519cd1657b21e
/乔纳森是个帅哥
问题是“test”中的文本是mongo字段的值,因此必须编写此查询,以便将文本体作为输入提供,并且它匹配出现在文本体中(是文本体的子字符串)的名称
一个更具体的例子:
db.test.find();
{“_id”:ObjectId(“547e9b79f2b519cd1657b21e”),“name”:“Jonathan”}
{“_id”:ObjectId(“547e9b88f2b519cd1657b21f”),“name”:“Sandy”}
find({name:{$in:[/Jonathan有最好的查询/]});
我需要构造一个查询,当输入“Jonathan有最好的查询”时返回“Jonathan”这个
$where
可能会起作用,但速度可能非常慢:
db.test.find({$where: function() {
var mystr = '/Jonathan has the best queries/';
var patt = new RegExp(this.name);
if (patt.test(mystr)) return true;
return false;
}})
^(?=.*\bJonathan\b.*$
如果mongodb支持lookeahead.and为什么不能做/Jonathan/.test('Jonathan是个帅哥')因为我需要找到值为“Jonathan”的记录,其中“Jonathan”出现在我指定的字符串中。(也就是说,我不是在试图找到包含某个字符串的值,而是在试图找到/包含在/某个字符串中的值。)您是在以正常方式反向工作:您提供文本并希望找到匹配的regexp。这不是操作员的工作方式,所以你不能直接这么做。如果您只想测试包容,那么使用。在上面的示例中,在name
上搜索“Johnathan有最好的查询”将匹配“name”:“Johnathan”
。谢谢,我查看了$where,但我正在查询数十万个文档,因此需要进行hella Performance的查找。或者至少不会太慢。