2016-01-08 13 views
0

Я хочу написать регулярное выражение для проверки поля ввода относительно Огурец syntax.The действительны например, входы, как этот Ex:Регулярного выражения для синтаксиса корнишонов огурца

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

+0

Правильно ли говорить, что вы пытаетесь создать веб-форму для проверки синтаксиса огурца, НЕ использовать огурцов через огурец? – DVG

+0

есть. Сейчас я просто делаю валидацию на стороне клиента. – ronypatil

+0

Я думаю, что цитируемая строка должна быть развернута с помощью разворачивания цикла technque: ['^ (Given | When | And | Then) (?: \ S + [A-Za-z] +) + \ s +" [^ "\\ ] * (?: \\ [^ "\\] *. *)" $ '] (https://regex101.com/r/jK6qU8/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 (с escape-последовательностями) лучше сочетаются с развернутым шаблоном (то есть "[^"\\]*(?:\\.[^"\\]*)*") - это самый эффективный шаблон, который я знаю для этих строк «...».

+0

спасибо !! Просто быстрая модификация i столкнулась с этим, если я хочу добавить строку после строки с кавычками. Ex. Дано Если я вхожу «100» в поле поиска. Я пробовал это Regex, но не работал:^(Учитывая | Когда | И | Тогда) (?: \ S + [A-Za-z] +) + \ s + "[^" \\] * (?: \\. [^"\\] *) *" $ \ s * (?: \ s + [A-Za-z] +) * – ronypatil

+0

Попробуйте '^ (учитывая | Когда | И | Тогда) (?: \ s + [A-Za -z] +) + \ s + \ x22 [^ \ x22 \\] * (?: \\. [^ \ x22 \\] *) * \ x22 $ ', см. [это демо] (https: // regex101 .com/г/fO2kV4/1). –

+1

Спасибо. Наконец, я обосновался с^(учитывая | когда | и | тогда) (?: \ S + [A-Za-z] +) + \ s + \ x22 [^ \ x22 \\] * (?: \\. [^ \ x22 \\] *) * \ x22 (?: (\ s * [A-Za-z]) *)? $ Знаете ли вы, как сделать (учитывая | когда | то | добавить) регистр, нечувствительный к регулярному выражению? – ronypatil

1

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

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

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

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