Регулярное выражение для огурца с синтаксисом огурца

0

Я хочу написать регулярное выражение для проверки поля ввода в отношении синтаксиса 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>

CodePenn

  • 0
    Правильно ли сказать, что вы пытаетесь создать веб-форму для проверки синтаксиса огурца, а НЕ использовать огурца через огурец?
  • 0
    да. Прямо сейчас я только делаю проверку на стороне клиента на переднем конце.
Показать ещё 3 комментария
Теги:
cucumber
cucumberjs
cucumber-java

2 ответа

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/>

Просмотреть обновленную ручку

Сначала измените type на text. Во-вторых, помните, что цитаты не могут использоваться как простые или экранированные, вам нужно либо использовать &quot; или \x22 в шаблоне. В-третьих, цитированные строки C (с escape-последовательностями) лучше сочетаются с развернутым шаблоном (например, "[^"\\]*(?:\\.[^"\\]*)*") - это самый эффективный шаблон, который я знаю для этих строк "...".

  • 0
    Спасибо !! Просто быстрая модификация, с которой я столкнулся, если я хочу добавить строку после строки в кавычках. Ex. Дано, если я введу «100» в поле поиска. Я пробовал это регулярное выражение, но не работает: ^ (учитывая | когда | и | тогда) (?: \ S + [A-Za-z] +) + \ s + "[^" \] * (?: \\. [^ "\] *) *" $ \ s * (?: \ s + [A-Za-Z] +) *
  • 0
    Попробуйте ^(Given|When|And|Then)(?:\s+[A-Za-z]+)+\s+\x22[^\x22\\]*(?:\\.[^\x22\\]*)*\x22$ , посмотрите эту демонстрацию .
Показать ещё 2 комментария
1

Чтобы ответить на ваш вопрос, это, похоже, работает и выполняет захваты каждого сегмента:

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

Чтобы пойти немного дальше, попытка проверки языка с помощью грамматика через встроенное в DOM-регекс звучит очень болезненно и плохой идеей. Тем более, что Gherkin действительно не соответствует формату, который вы предлагаете в своем вопросе.

Если вам нужно сделать это по какой-то причине, я бы предложил вам использовать фактическую библиотеку gherkin для синтаксического анализа строки: https://github.com/cucumber/gherkin3

Ещё вопросы

Сообщество Overcoder
Наверх
Меню