javascript - 仅匹配正则表达式的一部分
问题描述
我需要使用过滤名称列表regex
。
我以这种格式存储数据
[
{
"firstName": "Jhon",
"lastName": "Doe",
},
...
]
用户可以输入全名、名字或姓氏。但我需要将它们全部匹配。我的 mongo 查询是这样的(我曾经Loopback 4
构建过这个查询,但想法很明显)
{
or: [{firstName: new RegExp(searchKey, 'i')}, {lastName: new RegExp(searchKey, 'i')}],
};
但这在用户输入jhon doe时不匹配,但仅在输入名字或姓氏时有效。
我的问题是,有没有办法将部分字符串与正则表达式匹配?
预计将成功匹配所有“jhon”、“doe”、“jhon doe”和“jhondoe”
解决方案
我不知道是否有可能编写一个可以做到这一点的通用正则表达式,我做了一个蛮力算法来构建正则表达式。
let text = `[
{
"firstName": "Jhon",
"lastName": "Doe",
},
...
]`;
// Brute force
let key = "jhondoe";
let keyArr = [];
for (let i = 0; i < key.length; i++) {
let a = key.slice(0, i);
let b = key.slice(i);
a && keyArr.push(a);
b && keyArr.push(b);
}
let keySearch = keyArr.join("|");
console.error(keySearch);
let regex = new RegExp(`"(?:first|last)Name": "(${keySearch})"`, `gim`);
let matches = text.match(regex);
console.log(matches);
推荐阅读
- api - 嘿,有人可以给我看一些关于 discord.py API 的代码吗?使用来自网站的 api
- python - 为开发设置沙盒容器环境的好方法是什么?
- python - 解包字典
- python - 如何从 sqlalchemy .execute() 方法中获取价值?Python + Sqlalchemy + MS SQL 服务器
- acumatica - 报表设计器中 Acumatica 中金额字段的文字表示
- python - 如何解决爬取GitHub问题正文时出现非法字符的问题?
- yocto - yocto如何支持ftp命令?
- python - 未找到 Anaconda3 Python shapely 模块
- sql - 在 Postgres (Redshift) 中使用两个选择列运行 MAX 聚合查询时出现问题
- r - 新的 Hugo 帖子未显示 - RMarkdown/Blogdown