目前,我正在为儿童开发益智游戏,其中的玩家需要从网格中选择正确的单词。我用了正则表达式来匹配单词。
例如,我使用([D|E|C|K]){4}
来匹配 DECK ,因为玩家应该能够选择与 D-> E-> C-> K不完全相同的单词秩序。玩家可以选择 KDEC 或 EDCK 或 KCED 或任何顺序。
我通过使用([D|E|C|K]){4}
实现了这一目标。
但是在这里我面临问题,此模式匹配 EEEE 或 DDDD 或 DKDK 等。设置。
任何想法我如何修改正则表达式以得到期望的结果?
谢谢。
答案 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])
,D
,E
或C
K
-下一个字符不能是捕获到组1中的字符(?!\1)
-第2组:一个字母([DECK])
,D
,E
或C
K
-下一个字母不能等于第一个和第二个字母(?!\1|\2)([DECK])
-下一个字母不能等于第一个,第二个和第三个字母(?!\1|\2|\3)([DECK])
-字符串结尾