用正则表达式在另一个str中找到str

时间:2014-04-11 03:23:19

标签: regex mongodb

我定义了:

  var s1="roi john";
  var s2="hello guys my name is roi levi or maybe roy";

我需要拆分s1中的单词并检查它们是否包含在s2中 如果是,请给我具体存在的帖子

帮助我解决这个问题的最佳方法是将其作为正则表达式,因为我需要对mongo db进行此检查。

请让我知道我需要的正确的正则表达式。 THX。

2 个答案:

答案 0 :(得分:0)

使用循环迭代s1的单词并用s2检查将得到预期的结果

var s1="roi john";
var s2="hello guys my name is roi levi or maybe roy";
var arr1 = s1.split(" ");
for(var i=0;i<=arr1.length;i++){
    if (s2.indexOf(arr1[i]) != -1){
      console.log("The string contains "+arr1[i]);
    }
}

答案 1 :(得分:0)

可能只用正则表达式来回答(实际上是),但考虑到了数据:

{ "phrase" : "hello guys my name is roi levi or maybe roy" }
{ "phrase" : "and another sentence from john" }
{ "phrase" : "something about androi" }
{ "phrase" : "johnathan was here" }

您可以像这样匹配MongoDB:

 db.collection.find({ "phrase": /\broi\b|\bjohn\b/ })

这会得到两个匹配的文件:

{ "phrase" : "hello guys my name is roi levi or maybe roy" }
{ "phrase" : "and another sentence from john" }

所以正则表达式的工作原理是将单词边界\b保持在匹配的单词周围,这样它们就不会与其他东西部分匹配,并与&#34;或&#34; |条件。

使用regexer进行播放。

在MongoDB中执行这样的开放式$regex查询通常会对性能造成不利影响。不确定您的实际使用情况,但有可能进行全文搜索&#34;解决方案将更适合您的需求。 MongoDB具有全文索引和搜索功能,您也可以使用外部解决方案。

无论如何,这就是你使用$regex条件来训练单词的方式。

要将字符串实际处理为输入,在进行搜索之前需要一些代码:

var string = "roi john";
var splits = string.split(" ");

for ( var i = 0; i < splits.length; i++ ) {
    splits[i] = "\\b" + splits[i] + "\\b";
}

exp = splits.join("|");

db.collection.find({ "phrase": { "$regex": exp } })

甚至可能将其与不区分大小写的&#34; $选项&#34;如果这就是你想要的。使用文字$ regex运算符的第二个用法表单实际上是一种比JavaScript更加安全的表单形式用法。