Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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
当搜索字符串包含typescript/javascript中的通配符时在数组上搜索?_Javascript_Typescript - Fatal编程技术网

当搜索字符串包含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:
    +
    中表示:“一个或多个数字”(实际上这表示一个或多个“任何东西”)

这就是为什么我在将查询提供给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*'
,以与新行为保持一致。非常感谢您,它很管用!!!。如果我没有把问题解释清楚,我道歉。