1

我正在为nand2tetris项目做一个解析器。我想检查目标字段是否是,M|D|MD|A|AM|AD|AMD以及它们的不同组合方式,例如MAnot only AM

^(M|D|MD|A|AM|AD|AMD)\s*=$

此正则表达式正确匹配AM=,但不匹配MA=

我不想列出这些标记的所有可能组合,有没有办法简单地做到这一点?

4

1 回答 1

2

这应该这样做:

^(?=[MDA]+$)(?!.?(.).?\1).{1,3}$

演示

否定前瞻尝试匹配两个"M"、两个"D"或两个"A"

正向前瞻仅将字符串中的字符限制为"M","D""A"。这不是必需的,但它允许我.在其余部分使用 ',而不是(?![MDA]?([MDA])[MDA]?...),这可能更容易阅读。

于 2020-03-07T07:41:12.970 回答