正则表达式,用于逐步匹配句子

时间:2019-07-15 16:17:26

标签: javascript regex cucumber cucumberjs

正则表达式匹配下面的黄瓜步骤

Given I login to system
Given login to system

Given user attempts to login to system
Given I attempt to login to system
Given attempts to login to system

这应该失败-用户或I或BLANK有效,但他或其他字词无效

Given he login to system

我尝试了以下方法,但没有帮助。

 Given(/(?: user|I?)?(?: attempts to)? login to system/, function () {});

2 个答案:

答案 0 :(得分:0)

我猜测您可能正在尝试设计类似于以下内容的表达式:

^Given\s*(?:I|user)?\s*(?:attempts?\s+to)?\s*(?:login\s+to\s+system)$

如果要浏览/简化/修改该表达式,请在this demo的右上角进行解释。

答案 1 :(得分:0)

在阻塞时完全不使用正则表达式。您将只做一些复杂的事情,可能无法满足您方案所要求的所有不同用例。而是为每个步骤定义一个简单的步骤定义,并让每个步骤定义调用相同的帮助方法来实现功能。

所以你得到

Given 'I login into the system' do
  login as: @i
end

Given 'Fred logs into the system' do
  login as: @fred
end

Given 'I login into the system as an admin' do
  login as: @i, role: 'admin'
end

... 

这可以简化,足够干燥,并且完全消除了您在步骤定义中对正则表达式的需要(注意:我从一开始就很在意,并且几年没有使用过正则表达式,它们根本没有任何好处) ,并鼓励在实现时提供更好的代码(该登录功能将被广泛使用)。