我定义了:
var s1="roi john";
var s2="hello guys my name is roi levi or maybe roy";
我需要拆分s1中的单词并检查它们是否包含在s2中 如果是,请给我具体存在的帖子
帮助我解决这个问题的最佳方法是将其作为正则表达式,因为我需要对mongo db进行此检查。
请让我知道我需要的正确的正则表达式。 THX。
答案 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更加安全的表单形式用法。