正则表达式模式以匹配单词的字母组合

时间:2019-01-11 01:46:40

标签: regex

目前,我正在为儿童开发益智游戏,其中的玩家需要从网格中选择正确的单词。我用了正则表达式来匹配单词。

例如,我使用([D|E|C|K]){4}来匹配 DECK ,因为玩家应该能够选择与 D-> E-> C-> K不完全相同的单词秩序。玩家可以选择 KDEC EDCK KCED 或任何顺序。

我通过使用([D|E|C|K]){4}实现了这一目标。

但是在这里我面临问题,此模式匹配 EEEE DDDD DKDK 等。设置。

任何想法我如何修改正则表达式以得到期望的结果?

谢谢。

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要将范围中的每个字母匹配并捕获到一个单独的捕获组中,并在每个后续捕获组之前添加一个负前行,以避免匹配之前匹配的字母。

正则表达式看起来像

18 LOG        before:0
19 GET       [data-cy-component-key="actions-add"] input
20 CLICK
21 GET       [data-cy-component=single-picker-search] input
22 TYPE      Assets{enter}
23 GET       [data-cy-component="list-item-checkbox-title"]
24 FIRST
25 CLICK
26 GET       .iziToast    toast2
27 ASSERT    expected [ <div.iziToast.iziToast-opening.fadeInUp.iziToast-theme- 
alloy.iziToast-color-green.iziToast-animateInside>, 1 more... ] to have class iziToast-color-green
28 LOG       after:0
29 GET       [data-cy-component=list-item-title]
30 LOG       interface no. 1 of 1

请参见regex demo

详细信息

  • ^([DECK])(?!\1)([DECK])(?!\1|\2)([DECK])(?!\1|\2|\3)([DECK])$ -字符串的开头
  • ^-第1组:一个字母([DECK])DEC
  • K-下一个字符不能是捕获到组1中的字符
  • (?!\1)-第2组:一个字母([DECK])DEC
  • K-下一个字母不能等于第一个和第二个字母
  • (?!\1|\2)([DECK])-下一个字母不能等于第一个,第二个和第三个字母
  • (?!\1|\2|\3)([DECK])-字符串结尾