Я хочу написать регулярное выражение для проверки поля ввода в отношении синтаксиса Gherkin. Действительные примерные входы похожи на это Ex:
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"
Я попробовал это, но не работал: (Учитывая | Когда | И | Тогда) ^ [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>
Вы должны использовать
<input type="text" name="steps" ng-model="teststeps" ng-pattern="/^(Given|When|And|Then)(?:\s+[A-Za-z]+)+\s+\x22[^\x22\\]*(?:\\.[^\x22\\]*)*\x22$/" required/>
Просмотреть обновленную ручку
Сначала измените type
на text
. Во-вторых, помните, что цитаты не могут использоваться как простые или экранированные, вам нужно либо использовать "
или \x22
в шаблоне. В-третьих, цитированные строки C (с escape-последовательностями) лучше сочетаются с развернутым шаблоном (например, "[^"\\]*(?:\\.[^"\\]*)*"
) - это самый эффективный шаблон, который я знаю для этих строк "...".
^(Given|When|And|Then)(?:\s+[A-Za-z]+)+\s+\x22[^\x22\\]*(?:\\.[^\x22\\]*)*\x22$
, посмотрите эту демонстрацию .
Чтобы ответить на ваш вопрос, это, похоже, работает и выполняет захваты каждого сегмента:
(Given|When|Then|AND)([^"]+)(".+")
Чтобы пойти немного дальше, попытка проверки языка с помощью грамматика через встроенное в DOM-регекс звучит очень болезненно и плохой идеей. Тем более, что Gherkin действительно не соответствует формату, который вы предлагаете в своем вопросе.
Если вам нужно сделать это по какой-то причине, я бы предложил вам использовать фактическую библиотеку gherkin для синтаксического анализа строки: https://github.com/cucumber/gherkin3