0

我想针对 Gherkin 语法编写一个用于输入框验证的正则表达式。有效的示例输入如下所示:

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

基本上,我正在尝试:任何情况(Given|When|And|Then)+String+"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>

代码潘

4

2 回答 2

1

要回答您的问题,这似乎可行,并执行每个段的捕获:

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

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

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

于 2016-01-08T20:26:36.537 回答
1

你需要使用

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

查看更新的笔

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

于 2016-01-08T23:03:15.560 回答