当搜索字符串包含typescript/javascript中的通配符时在数组上搜索?
我有一组电话号码。我还有一个搜索字符串。搜索字符串由用户提供。搜索字符串可以包含通配符,如星号(*)或问号(?)。我需要一种从我的电话号码数组中筛选出元素的方法当搜索字符串包含typescript/javascript中的通配符时在数组上搜索?,javascript,typescript,Javascript,Typescript,我有一组电话号码。我还有一个搜索字符串。搜索字符串由用户提供。搜索字符串可以包含通配符,如星号(*)或问号(?)。我需要一种从我的电话号码数组中筛选出元素的方法 The following is my phone number array. let mobileNumbersArray = ["830456481", "831456481", "9886503103" ] **Condition 1** w
The following is my phone number array.
let mobileNumbersArray = ["830456481", "831456481", "9886503103" ]
**Condition 1**
when search string is *
let searchString = "*"
expected result = ["830456481", "831456481", "9886503103"]
**Condition 2**
when search string is 83*
let searchString = "83*"
expected result = ["830456481", "831456481"]
**condition 3**
let searchString = "*456*"
expected result = ["830456481", "831456481"]
**condition 4**
exact search
let searchString = "9886503103"
expected result = ["9886503103"]
**condition 5**
exact search
let searchString = "83?4"
expected result = ["830456481", "831456481"]
如何在我的电话号码数组中搜索字符串,并以尽可能干净的方式将结果作为数组获取
谢谢你的帮助
谢谢。我能想象的最简单的方法就是使用正则表达式。你可以了解更多。我想我可能有一个有趣的解决方案。请看一下下面的片段,让我知道它是否适合您 您可以在MDN上阅读 然后是关于这个问题。这是钥匙。不是每个人都知道可以动态生成正则表达式 更新: 其思想是将“通配符”语法转换为RegExp语法,如下所示:
在RegExp:?
或[0-9]
\d
在RegExp:*
中表示:“一个或多个数字”(实际上这表示一个或多个“任何东西”)+
[0-9]
替换为
函数查询编号(数组,查询){
const src=query.replace(/\?/g,'[0-9]')。replace(/\*/g,'.+');
const regexp=new regexp('^'+src+'$);
返回array.filter((item)=>regexp.test(item));
}
常量mobileNumbersArray=['830456481','831456481','9886503103'];
log(queryNumbers(mobileNumbersArray,'*');
log(queryNumbers(mobileNumbersArray,'83*');
log(queryNumbers(mobileNumbersArray,'*456*');
log(queryNumbers(mobileNumbersArray,'9886503103');
log(queryNumbers(mobileNumbersArray,'83?4*');
log(queryNumbers(mobileNumbersArray,'8*')代码>我认为有一个小问题。当我尝试console.log(queryNumbers(mobileNumbersArray,'8*');结果是不正确的。[“830456481”、“831456481”、“9886503103”]@StarbucksAdmin这取决于你的预期行为。我刚刚更新了代码(添加了RegExp字符串开始/结束锚点)。请注意,我还将'83?4'
用例更改为'83?4*'
,以与新行为保持一致。非常感谢您,它很管用!!!。如果我没有把问题解释清楚,我道歉。