有没有办法获得正则表达式模式的所有可能结果?

时间:2012-01-27 19:23:46

标签: javascript jquery regex

有没有办法获得正则表达式模式的所有可能结果?我见过的所有内容都是指针对字符串进行评估的模式。但我需要的是拥有这样的模式:

^EM1650S(B{1,2}|L{1,2})?$

生成所有可能的匹配项:

EM1650S
EM1650SB
EM1650SBB
EM1650SL
EM1650SLL

4 个答案:

答案 0 :(得分:2)

在一般情况下,没有。在这种情况下,您几乎没有解决方案空间。

有一个section covering this in Higher Order Perl (PDF)和一个Perl module。我从来没有在其他任何方面重新实现它,但我有类似的问题,这个解决方案足以满足同样有限的需求。

答案 1 :(得分:2)

有些工具可以显示正则表达式的所有可能匹配。

这是用Haskell编写的:https://github.com/audreyt/regex-genex 这是一个Perl模块:http://metacpan.org/pod/Regexp::Genex

不幸的是我找不到任何关于JavaScript的内容

答案 2 :(得分:1)

在这种特殊情况下,是的。正则表达式生成有限数量的有效字符串,因此可以对它们进行计数。

你只需要解析正则表达式。其中一部分(EM1650S)是强制性的,所以请考虑其余部分。按|(或)符号解析。然后枚举它的两边的字符串。然后你可以得到它们的所有可能组合。

某些正则表达式(包含*+符号)可以表示无限数量的字符串,因此无法计算它们。

答案 3 :(得分:1)

从计算理论的角度来看,正则表达式相当于有限状态机。这是“自动机理论”的一部分。您可以创建一个等效于正则表达式的有限状态机,然后使用图遍历算法遍历FSM的所有路径。在一般情况下,可数无限数量的字符串可能与正则表达式匹配,因此您的程序可能永远不会终止,具体取决于输入正则表达式。