Javascript 模式匹配矩阵

标签 javascript regex matrix pattern-matching match

在 javascript 中,我有一个矩阵数组,每个矩阵都是 5x5。例如:

25, 32, 26, 27, 29
01, 22, 15, 17, 99
12, 14, 17, 19, 88
16, 14, 12, 17, 19
02, 08, 09, 18, 19

我有一个方法findMatches (a, b, c, d, e),它接受五个数值。目标是返回符合以下任意条件的新矩阵数组:

findMatches (a, b, c, d, e) 方法中至少有 4 个数字与任意矩阵行中的至少 4 个连续数字匹配。例如。如果矩阵行有 22, 23, **29**, 24, 25 ,它将不匹配,因为该方法中没有一组四个数字彼此相邻(这并不重要,但是,如果顺序与提供给该方法的整数的顺序相匹配。它可以是 a、c、d、e,那就可以了。)。但是,如果是 22, 26, 23, 24 它将匹配,因为至少有四个连续数字来自该方法。例如:

**22**, 32, 26, 27, 29
**26**, 22, 15, 17, 99
**23**, 14, 17, 19, 88
**24**, 14, 12, 17, 19
  02,   08, 09, 18, 19

与上面相同,但在任意矩阵列而不是行

20, 01, 02,  03,  08
01,*22,*23*,*25*,*24*
12, 14, 17, 19, 88
16, 14, 12, 17, 19
02, 08, 09, 18, 19

与最后两个相同,但对 Angular 线,而不是行或列

**22**, 32, 26, 27, 29            01, 02, 03,   04,   05
01, **23**, 15, 17, 99            06, 07, 08, **24**, 10
12, 14, **26**, 19, 88            11, 12, **23**, 14, 15
16, 14, 12, **25**, 19            16, **25**, 18, 19, 20
02, 08, 09,   18,   19          **22**, 22,   23, 24, 25

任何矩阵中没有两个数字是相同的。例如,整个矩阵中数字1不会出现多次。

我不太确定如何解决这个问题。我的第一直觉是坐在那里生成所有可能的矩阵来检查匹配,但考虑到有超过一百万种可能的组合,这显然是不可行的。

最佳答案

这是使用正则表达式的解决方案:

首先,我假设每个矩阵都以与您所述完全相同的文本格式存储(这很重要,因为正则表达式可能需要进行调整)。

我们将使用此模式(您需要用变量替换 01、02、03、20)。我稍微解释一下

(01|02|03|20), (?!\1)(01|02|03|20), (?!\1)(?!\2)(01|02|03|20), (?!\1)(?!\2)(?!\3)(01|02|03|20)

首先我们匹配任意数字。然后是逗号,然后是不是第一个数字的任何数字。

(?!\1) 正在做几件事。首先,它执行“负向先行断言”,向前查找而不消耗字符,并确保它们不包含 \1,这是对我们第一个捕获的数字的反向引用。

将其用于垂直和对 Angular 线列表是一件简单的事情,只需捕获适当的行并将其转换为水平格式,然后对其运行正则表达式即可。

希望这可以帮助您入门。如果您遇到困难,请随时回复您的尝试。

关于Javascript 模式匹配矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32415859/

相关文章:

regex - Hive 的 RegexSerDe 没有给出正确的输出

python - MatLab 和 numpy 中 Hermitian 矩阵特征值的差异

javascript - Angular -cli : Karma-Webpack bails with 'no such file or directory'

javascript - 运行 mongoDB shell 的 JavaScript 引擎是什么?

python - unicode 字符串中的正则表达式

regex - 在 VS Code 中搜索多个术语

r - 拆分矩阵并重新加入

java - Oj 算法并发

javascript - 带 Angular JS 的 Imgur API http 发布图像

javascript - 如何取消这些 Promise 的嵌套?