Regex для замены / добавления атрибута HTML - PullRequest
2 голосов
/ 11 декабря 2008

Я ищу однострочное регулярное выражение, которое выполняет следующие действия:

Учитывая HTML-тег с атрибутом "name", я хочу заменить его своим собственным атрибутом. Если у этого тега отсутствует атрибут имени, я хочу имплантировать свой собственный атрибут. Результат должен выглядеть так:

<IMG name="img1" ...> => <IMG name="myImg1" ...>
<IMG ...> => <IMG name="myImg1" ...>

Можно ли это сделать с помощью регулярного выражения в одну строку?

Ответы [ 3 ]

4 голосов
/ 12 декабря 2008

Хитрость заключается в том, чтобы соответствовать каждой полной паре «атрибут = значение», но захватывает только те, чье имя атрибута не является «именем». Затем подключите свой собственный атрибут «name» вместе со всеми захваченными.

s/<IMG
  ((?:\s+(?!name\b)\w+="[^"]+")*)
  (?:\s+name="[^"]+")?
  ((?:\s+(?!name\b)\w+="[^"]+")*)
  >
 /<IMG name="myName"$1$2>
 /xg;
1 голос
/ 11 декабря 2008

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

s/(&lt;IMG)((\s+[^&gt;]*)name="[^"]*")?(.*)/$1$3 name="myID"$4/g
0 голосов
/ 11 декабря 2008

Если, как в вашем примере, атрибут name всегда является первым внутри тега IMG, то это очень просто. Искать

<(?!/)(/w+)\s+(name="[^"]+")?

и заменить на

<\1 name="myImg1"

но я сомневаюсь, что это то, что вы действительно хотите.

Если атрибут имени может встречаться в других позициях, это становится более сложным.

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