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