Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 只匹配regexp的一部分_Javascript_Regex_Mongodb - Fatal编程技术网

Javascript 只匹配regexp的一部分

Javascript 只匹配regexp的一部分,javascript,regex,mongodb,Javascript,Regex,Mongodb,我需要使用regex过滤姓名列表 我以这种格式存储了数据 [ { “名字”:“Jhon”, “姓氏”:“能源部”, }, ... ] 用户可以输入全名、名或姓。但我需要把它们都匹配起来。我的mongo查询是这样的(我使用了loopback4来构建这个查询,但想法很明显) { 或者:[{firstName:new RegExp(searchKey,'i')},{lastName:new RegExp(searchKey,'i')}], }; 但当用户输入jhon doe时,这并不匹配,但当只输

我需要使用
regex
过滤姓名列表

我以这种格式存储了数据

[
{
“名字”:“Jhon”,
“姓氏”:“能源部”,
},
...
]
用户可以输入全名、名或姓。但我需要把它们都匹配起来。我的mongo查询是这样的(我使用了
loopback4
来构建这个查询,但想法很明显)

{
或者:[{firstName:new RegExp(searchKey,'i')},{lastName:new RegExp(searchKey,'i')}],
};
但当用户输入jhon doe时,这并不匹配,但当只输入名字或姓氏时,它会起作用

我的问题是,有没有办法将字符串的一部分与regex匹配


预计将返回所有“jhon”、“doe”、“jhon doe”和“jhondoe”的成功匹配

我不知道是否有可能编写一个通用正则表达式来实现这一点,我制作了一个蛮力算法来构建正则表达式

let text=`[
{
“名字”:“Jhon”,
“姓氏”:“能源部”,
},
...
]`;
//蛮力
让key=“jhondoe”;
设keyArr=[];
for(设i=0;iconsole.log(匹配项)现在我编写了一个完整的代码,它考虑了几个方面。不幸的是,如果有人有一个名字叫jhon doe,而另一个人有一个名字叫jhond oe,那么这个代码将接受它

其主要思想是检查密钥是名还是姓。否则,如果它包含空格,则第一个空格之前的所有内容都是firstName,之后的所有内容都是lastName。否则,使用暴力,它会测试firstName和lastName的所有组合,左边的子字符串是firstName,右边的子字符串是lastName

let text=`[
{
“名字”:“Jhon”,
“姓氏”:“能源部”,
},
...
]`;
常量nameValidator=(键,文本)=>{
//尝试检查接收到的整个密钥是名还是姓。
让regexKey=newregexp(`((?:first | last)Name):“${key}`,`gim`);
if(regexKey.test(文本)){
返回true;
}else if(键包括(“”)){
//如果密钥有空格,我们已经知道名字和姓氏
//如果密钥有多个空格,则第一个空格后的所有内容都将转到lastName
让[3;,a,b]=/^(\w+)(.*)$/.exec(键);
让regexFirstLastName=newregexp(`firstName:${a},(\\s|\\t|\\n)*“lastName:${b},`,`gim`);
if(regexFirstLastName.test(文本)){
返回true;
}
}否则{
//用暴力搜索名字和姓氏之间的区别
for(设i=1;i}
searchKey.split(/\s/g).join(“|”)
。?是的,这是一个解决方案。但假设用户输入“jhondoe”?根据任何标准,这都不是用户名的有效部分,因此应该失败。您可以在字符串末尾添加
“|”+searchKey
,以包含原始搜索键,但我会放弃该选项。如果是用户名,请同意。但这些都是用户名,要求找到匹配的用户名。我需要知道这是否可以用某种regexp语句实现。顺便说一句,你的上述评论现在已经奏效了。你考虑过吗?哇!!!!。。这是残酷的。你可能会得到意想不到的结果,因为它比较每个字母也。。但我明白我的问题应该得到这个答案。我不确定我是否应该接受这个答案,但它是正确的,可能修改为接受整个单词,或者如果它是一个子字符串,您必须同时匹配名称和姓氏。