小黄瓜语法黄瓜的正则表达式

Regular expression for gherkin syntax cucumber

我想写一个关于 Gherkin 的输入框验证的正则表达式 syntax.The 有效的示例输入是这样的 例如:

Given I enter "www.google.com"
And enter keyword "new york"
When I click on "Images"
Then I can see "image list"

基本上,我正在尝试:任何情况(给定|何时|然后|然后)+字符串+"String in quotes"

我试过了但没有用:(Given|When|And|Then)^[A-Za-z]+$/"(?:[^"\]|\.)*"/

创建了一个这样的表单

<body ng-app="app">
 <form name="exampleForm" class="elegant-aero">
   <label>Test Step:</label>
   <input type="email" name="steps" ng-model="teststeps" ng-pattern="(Given|When|And|Then)^[A-Za-z]+$/"(?:[^"\]|\.)*"/" required/>
   <div ng-messages="exampleForm.steps.$error">
     <div ng-message="required">This field is required</div>
     <div ng-message="pattern">Must be a valid gherkin syntax</div>
   </div>
 </form>
</body>

CodePenn

为了回答您的问题,这似乎有效,并执行每个片段的捕获:

(Given|When|Then|AND)([^"]+)(".+")

更进一步,尝试通过嵌入 DOM 中的正则表达式用语法来验证一种语言听起来非常痛苦,而且是个坏主意。特别是因为小黄瓜并没有真正遵循您在问题中建议的格式。

如果您出于某种原因需要这样做,我建议您使用实际的小黄瓜库来解析字符串:https://github.com/cucumber/gherkin3

你需要使用

<input type="text" name="steps" ng-model="teststeps" ng-pattern="/^(Given|When|And|Then)(?:\s+[A-Za-z]+)+\s+\x22[^\x22\]*(?:\.[^\x22\]*)*\x22$/" required/>

updated pen

首先,将type改为text。其次,请注意引号不能用作普通引号或转义引号,您需要在模式中使用 &quot;\x22。第三,引用的 C 字符串(带有转义序列)与展开的模式(即 "[^"\]*(?:\.[^"\]*)*")更好地匹配——这是我所知道的对于那些“...”字符串最有效的模式。