【问题标题】:Match all possible combinations of substring in array匹配数组中所有可能的子串组合
【发布时间】:2020-10-20 17:28:09
【问题描述】:

假设我有一个输入字符串,如“自动编码器”和字符串数组

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'] 这样的单个元素的数组来测试它,它什么也不返回。

我怎样才能实现所需的匹配?

【问题讨论】:

  • 您需要正则表达式特定的解决方案吗?你的意思是arr.findarr.findall 是正确的吗? JavaScript 本身不存在这样的函数。
  • @sçuçu 这是不正确的。 Array.prototype.find 只返回数组中的第一个匹配项。如果您想要多个匹配项,则必须改用Array.prototype.filter
  • @sçuçu 抱歉,当然是一些而不是 findall。
  • 我并不是说它会是正确的答案,我的意思是它本身就是正确的,它在 JavaScript 中也是正确的。
  • 我会说如果你有正确的正则表达式来满足你的目的,如果你最后需要一个匹配的数组使用filter,或者你只是想知道一些数组元素是否匹配或不使用some。如果您不知道是否所有元素都匹配,请使用every。同样find 只会返回第一个匹配项。

标签: javascript reactjs regex


【解决方案1】:
function isIncluded(str, arr) {
  str = str.replace(/\W/g, '');
  return arr.some(e => (e.replace(/\W/g, '') === str));
}

【讨论】:

    【解决方案2】:

    替换特殊字符(非单词字符)并与数组比较呢?

    const arr = ['auto encoder', 'autoencoder'];
    
    const fn = (s, a) => a.includes(s.replace(/\W/g, ''));
    
    
    console.log(fn('auto-encoder', arr));
    console.log(fn('a u t o e n c o d e r', arr));
    console.log(fn('random', arr));

    【讨论】:

      【解决方案3】:

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

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

      如果你的 rinput 是一个数组,你可以使用各种数组方法: 如果某些元素匹配,您想要一个布尔答案

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

      如果您想知道是否所有元素都匹配,请使用 every 而不是 some

      您还有其他选择。对于匹配数组,请使用 filter:

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

      你可以根据你想要实现的每个功能来回答你的功能。

      【讨论】:

        猜你喜欢
        • 2019-03-10
        • 2011-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多