我正在尝试创建一个与以下内容匹配的正则表达式:
Given I'm a user
Given I am a user
Given Dylan is a user
这是我的步骤定义:
@Given("^(?:(I)'m|(I) am|(.+) is) a user$")
public void aUserExists(String username) throws Throwable {
}
它符合我的需要,但似乎Cucumber正在尝试将非捕获组中的每个捕获组分配给参数,而我希望它只分配一个:
cucumber.runtime.CucumberException:Arity不匹配:步骤定义'hello.MyStepdefs.aUserExists(String)in [...] with pattern [^(?:( I)'m |(I)am |(。+ )))用一个参数声明用户$]。但是,小黄瓜步骤有3个参数[I,null,null]。
我来自PHP背景,这个正则表达式适用于Behat。也许我没有得到关于Java正则表达式或Cucumber行为的信息。
更新
由于目前所有答案都有同样的问题,我正在更新问题。
我不想匹配像:
这样的字符串Given I is a user
我希望仅在I
或'm
后跟am
匹配。我希望用Java正则表达式和Cucumber做一件不可能的事情。
答案 0 :(得分:2)
我不确定这是否是您正在寻找的,但如果您想在第一组中捕获用户名而不创建更多组,那么可以尝试
"^(\\w+)(?:(?<=I\\b)(?:'m| am)|(?<!^I\\b) is) a user$"
答案 1 :(得分:1)
你可以重写正则表达式只使用一个捕获组,虽然它变得丑陋:
@Given("^(I(?='m| am)|.+(?= is))(?:'m| am| is) a user$")
答案 2 :(得分:0)
var _reactMapGl = require('react-map-gl');
与您的正则表达式无关,而是您的Arity mismatch:
行与您的方法签名不匹配Given I'm a user
取出字符串参数并重试。