2017-02-22 3 views
0

Я пытаюсь сузить свой RegEx, чтобы игнорировать элементы формы с помощью type="submit". Я хочу только выбрать часть элементов до части class="*", но все равно игнорировать, если type = "submit" приходит до или после класса.регулярное выражение исключить совпадение, которое содержит шаблон строки

Моя регулярное выражение до сих пор:

(<(?:input|select|textarea){1}.*[^type="submit"]class=")(((?!form\-control)[a-zA-Z0-9_ -])*") 

Тестовый пример: Line один должен соответствовать до конца класса, и линия 2 игнорируется.

<input type="text" name="name" id="test" class="example-class" max-length="7" required="required"> 
<input type="submit" class="btn-primary" value="send"> 

Возможно ли это?

+0

На каком языке вы используете это регулярное выражение? – gms0ulman

+0

Я использую инструмент поиска и замены текстового редактора атома для выполнения пакетных изменений html. Это не часть скрипта. Я использую http://regexr.com/ для создания regex – Kiee

+0

ПОЧЕМУ так много людей используют '... {1}', как вы думаете, что это изменится? – Fallenhero

ответ

0

Спасибо за ваши комментарии. Ответ был отрицательным.

Добавление (?!.*type="submit.*) в начало регулярного выражения, похоже, дало мне мой желаемый результат.

Рабочая Regex:

(?!.*type="submit.*)(<(?:input|select|textarea).*class=")(((?!form\-control)[a-zA-Z0-9_ -])*") 
+0

Мы по-прежнему считаем, что программа, использующая действительный синтаксический анализатор HTML, будет иметь больше смысла –

+0

Я не уверен, почему парсер HTML продолжает ссылаться. Я хочу выполнить широкомасштабный поиск и замену нескольких файлов HTML, используя шаблон регулярного выражения. Является ли анализатор HTML по-прежнему актуальным для этого сценария? – Kiee

+0

Абсолютно. Вы можете написать небольшой скрипт на любом языке для поиска по многим файлам в папке. Это просто зависит от ваших потребностей. –

0
(<(?:input|select|textarea)\s((?!type="submit")[\w\-]+\b="[^"]*"\s?)*>) 

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