用于匹配字符串模式的Javascript函数

时间:2017-04-17 00:44:13

标签: javascript pattern-matching

我已经在这个问题上工作了很长时间,我正在寻求一些帮助。我已经在这个问题上寻求帮助,但我一直在寻找有关正则表达式和通配符匹配的帖子。我想写一个Javascript函数,它接受2个字符串作为输入,如果第二个字符串匹配"模式"则输出true / false。第一个字符串。

示例1:

string1 = 'abca'
string2 = 'xxqrzzxx'
output = true

在这个例子中,' a' =' xx',' b' =' qr'和' c' =' zz'。 其他可能的string1"模式"使用string1中的字符将是' aabccaa' aabdccaa',' aabdcaa'和' abdcca'。我选择了' d'对于第四个独特的角色任意。

示例2:

string1 = 'abaq'
string2 = '1234p1234qwerrewq'
output = true

在这个例子中,' a' =' 1234',' b' =' p',' q' =' qwerrewq'。当然,这只是众多可能模式中的一种。

示例3:

string1 = 'abaq'
string2 = '1234p1234qweppewq'
output = false

在这个例子中,' b' =' p'与上一个示例中一样,它再次用于' qweppewq'序列所以"最接近" string1的模式将是' abaqbbq'。

这是我到目前为止的情况,我知道它甚至不接近解决方案。我非常确定我需要创建一个递归函数来生成所有字符序列的可能性,但我不确定它会是什么样子。

let patternMatching = (str1, str2) => {

  let patterns = {};
  let examples = {};
  let array = [];
  let pattern = str1.split('');
  let example = str2.split('');

  pattern.forEach((element, index) => {
    if (!patterns[element]) {
      patterns[element] = index;
      array.push(element);
    }
  });
  example.forEach((element, index) => {
    examples[element] = index;
  });

  let uniques = Object.keys(examples).length;
  for (let i = 0; i < uniques; i++) {
    let obj = {};
    let copy = str2.slice(0);
    obj[array[i]] = copy.slice(i, 1); // or recursive function
    while (j < uniques) {
      let result = '';
      pattern.forEach(char => {
        result += obj[char];
      });
      if (str1 === result) return true;
      j++;
    }
  }

  return false;
};

let pattern = 'abc';
let example = 'xxyyzz';
console.log('pattern', pattern);
console.log('example', example);
console.log(patternMatching(pattern, example));

如果之前已经回答过这个问题,请重定向我。

0 个答案:

没有答案