регулярное выражение, чтобы найти некоторые значения, которые могут быть случайно расположены в строке и разместить их в определенном порядке - PullRequest
0 голосов
/ 05 ноября 2011

У меня есть htmlstring, которая содержит несколько входных тегов. Мне нужно идентифицировать 3 группы в этой строке и заменить эти захваченные группы внутри строки в определенном порядке.

вот пример недопустимой строки:

<input style="BORDER-BOTTOM: 0px; TEXT-ALIGN: center; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fff6b7; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-SIZE: 10px; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" onkeyup=this.value=this.name.substring(0,9); name=smartTag_Campaign_Date value=Campaign_Date size=18>

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

К сожалению, я не могу использовать анализатор html, и поэтому мне нужно придерживаться выражений регулярных выражений, которые я сам не могу понять.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2011

Действительно простое / базовое решение - использовать регулярные выражения в приведенной ниже форме для захвата каждой из ваших групп в отдельности.В основном он ищет имя атрибута, фиксирует любые (представленные точками) символы после него, пока не найдет закрывающую скобку или один пробел.Обратите внимание, что они очень упрощены и должны быть изменены, чтобы компенсировать правовые изменения в формате html .... такие как пробелы по обе стороны от знака равенства.Но это начало.Regexr.com - хороший инструмент для создания и тестирования регулярных выражений.Правая часть дает вам библиотеку компонентов, из которых можно выбирать, с определениями того, что они означают в регулярном выражении.

Как указано Истиной, это не очень гибкий / масштабируемый / правильный способ сделать этот типвещь, но она выполняет свою работу в зависимости от ваших потребностей.

value=(.+)[\s>]
name=(.+)[\s>]
size=(.+)[\s>]

Так что вы можете немного ближе познакомиться с регулярными выражениями, подробное описание каждой части ниже:

attribute = соответствует точному имени атрибута, за которым следует знак равенства
(. +) точка представляет любой символ (следите за переносом строки ...), + говорит ему искать 1 или более из них в последовательности.Круглые скобки используются для захвата группы.
[\ s>] класс символов, содержащий буквальный символ > и пробел, обозначаемый / s

0 голосов
/ 05 ноября 2011

Подобные вещи практически невозможны с REGEX. Брось это. Не пытайтесь, если вы не хотите, чтобы нечестивый ребенок плакал кровью девственниц .

Насколько я понимаю, HTML-анализатор DOM / [X] - это ваш единственный вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...