Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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 匹配数组中所有可能的子字符串组合_Javascript_Reactjs_Regex - Fatal编程技术网

Javascript 匹配数组中所有可能的子字符串组合

Javascript 匹配数组中所有可能的子字符串组合,javascript,reactjs,regex,Javascript,Reactjs,Regex,假设我有一个像“自动编码器”这样的输入字符串和字符串数组 const arr = ['autoencoder', 'auto-encoder', 'autoencoder'] 我希望输入字符串与数组中的所有三个匹配 我创建了正则表达式 arr.some(word => word.match(/^[a-zA-Z]+(?:(?:\s[a-zA-Z]+)+|(?:\-[a-zA-Z]+)|(?:[a-zA-Z]+))$/)) 但它似乎不起作用,好像我用一个数组来测试它,它只有一个元素,比如[

假设我有一个像“自动编码器”这样的输入字符串和字符串数组

const arr = ['autoencoder', 'auto-encoder', 'autoencoder']
我希望输入字符串与数组中的所有三个匹配

我创建了正则表达式

arr.some(word => word.match(/^[a-zA-Z]+(?:(?:\s[a-zA-Z]+)+|(?:\-[a-zA-Z]+)|(?:[a-zA-Z]+))$/))
但它似乎不起作用,好像我用一个数组来测试它,它只有一个元素,比如['auto-encoder'],它什么也不返回

如何实现所需的匹配?

包含函数(str、arr){
str=str.replace(/\W/g');
返回arr.some(e=>(e.replace(/\W/g',)==str));
}

我认为您的输入将是一个字符串,而不是字符串数组。您已经有了正则表达式,只需围绕它定义一个函数:

function f(word) {
  return word.match(/^[a-zA-Z]+(?:(?:\s[a-zA-Z]+)+|(?:\-[a-zA-Z]+)|(?:[a-zA-Z]+))$/);
}
如果你的输入是一个数组,你可以使用各种数组方法: 如果您希望在某些元素匹配时得到布尔值答案

function f(arr) {
  return arr.some(word => word.match(/^[a-zA-Z]+(?:(?:\s[a-zA-Z]+)+|(?:\-[a-zA-Z]+)|(?:[a-zA-Z]+))$/));
}
如果您想知道所有元素是否匹配,请使用
每一个
而不是
一些

你还有其他选择。要获得匹配数组,请使用
过滤器

function f(arr) {
    return arr.filter(word => word.match(/^[a-zA-Z]+(?:(?:\s[a-zA-Z]+)+|(?:\-[a-zA-Z]+)|(?:[a-zA-Z]+))$/));
}

您可以根据每个函数要实现的功能来回答函数。

替换特殊字符(非单词字符)并与数组进行比较怎么样

const arr=['auto encoder','autoencoder'];
常数fn=(s,a)=>a.包括(s.替换(/\W/g,);
控制台日志(fn(“自动编码器”,arr));
控制台日志(fn('a u to e n c o d e r',arr));

控制台日志(fn('random',arr))是否需要特定于正则表达式的解决方案?你是说
arr.findall
,哪个是正确的?JavaScript本身不存在这样的函数。@sçuçu不正确
Array.prototype.find
仅返回数组中的第一个匹配项。如果你想要多个匹配项,你必须使用
Array.prototype.filter
。@sçuçu抱歉,一些而不是findall,当然。我不是说这是正确的答案,我的意思是它本身是正确的,在JavaScript中也是正确的。我会说,如果你有正确的正则表达式,如果最终需要一个匹配数组,请使用
过滤器
,或者如果您只想知道某些数组元素是否匹配,请使用
某些
。如果您不知道所有元素是否匹配,请使用
every
。再次
find
将只返回第一个匹配项。