Ruby Cucumber步骤定义正则表达式排除

Ruby Cucumber步骤定义正则表达式排除,ruby,regex,cucumber,Ruby,Regex,Cucumber,我需要一些关于Cucumber步骤定义文件中正则表达式的帮助。我的许多步骤都属于以下类型: Given I am on the search page 我的大多数步骤定义都使用这种通用模式,并使用默认的Webrat正则表达式来选择它,如下所示: Given /^(?:|I )am on (.+)$/ do |page_name| visit path_to(page_name) end 问题是,我需要以不同的方式处理标题为“results”的页面,我不知道如何修改上述正则表达式以排

我需要一些关于Cucumber步骤定义文件中正则表达式的帮助。我的许多步骤都属于以下类型:

Given I am on the search page
我的大多数步骤定义都使用这种通用模式,并使用默认的Webrat正则表达式来选择它,如下所示:

Given /^(?:|I )am on (.+)$/ do |page_name|
     visit path_to(page_name)
end

问题是,我需要以不同的方式处理标题为“results”的页面,我不知道如何修改上述正则表达式以排除显示“give I on The results page”(给定我在结果页面上)的行。

您可以使用负面前瞻来解决此问题:

Given /^(?:|I )am on (?!the results)(.+)$/ do |page_name|
    p page_name
end

Given /^I am on the results page$/ do
   p 'We matched the results page'
end

更具体的正则表达式(用于结果页)应该会赢,因此您不需要更改通用正则表达式。这实际上是我尝试的第一件事之一,但我仍然在两个正则表达式的匹配方面出错。谢谢,我最终没有使用正则表达式,而是为每种情况编写单独的正则表达式,但我刚刚试过这个,它肯定有效。