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

时间:2016-01-08 19:47:36

标签: angularjs regex cucumber cucumberjs cucumber-java

我想为Gherkin语法编写一个用于输入框验证的正则表达式。有效的示例输入是这样的 例如:

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

基本上,我正在尝试:任何情况下(给定|当|和|然后)+字符串+"引号中的字符串"

我试过这个但没有工作:(给|当|和|然后)^ [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

2 个答案:

答案 0 :(得分:1)

要回答您的问题,这似乎有效,并执行每个细分的捕获:

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

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

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

答案 1 :(得分: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/>

请参阅updated pen

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