我已经在这个问题上工作了很长时间,我正在寻求一些帮助。我已经在这个问题上寻求帮助,但我一直在寻找有关正则表达式和通配符匹配的帖子。我想写一个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));
如果之前已经回答过这个问题,请重定向我。