regex для замены метки alt на имя источника изображения

Я работал с regex, пытаясь изменить 1000 файлов и добавить тег Image alt в качестве имени изображения.

Пример текста для поиска / замены

<img src="path/someimagename.jpg" height="100" width="100" />

Конечное состояние

<img src="path/someimagename.jpg" alt="someimagename" height="100" width="100" />

I am able to find items with out alt

(<img(?!.*?alt=(['"]).*?)[^>]*)(>)

заменять:

I have been working with regex attempting to change 1000 files and both add image alt tag as the image name.

Example text to search / replace

<img src="path/someimagename.jpg" height="100" width="100" />

End state

<img src="path/someimagename.jpg" alt="someimagename" height="100" width="100" />

I am able to find items with out alt

(<img(?!.*?alt=(['"]).*?2)[^>]*)(>)

replace: $1 alt="" $3

and I'm able to find image name

<imgb[^<>]*?src=['"].*?/([^./<>]*).[^./<>]*['"][^><]*?>

I have not figured out to combine both and achieve the goal

Looking to use a text editor to replace all files.

Any suggestions or help would be great.

alt=""

и я могу найти имя изображения

<imgb[^<>]*?src=['"].*?/([^./<>]*).[^./<>]*['"][^><]*?>

Не придумал совместить и то и другое и достичь цели

Использование текстового редактора для замены всех файлов.

Любые предложения или помощь было бы здорово.

1 ответ

  1. В регулярном выражении необходимо создать группу захвата. Я немного адаптировал ваше выражение (оно также поддерживает вложенные пути):

    (<img\b[^<>]*?src=['"].*?\/?.*?)([^.\/<>]*)(\.[^.\/<>]*?['"])([^><]*?\>)
    

    И тогда, вы можете заменить его на это:

    
    	

    You need to create some capture group in your regular expression. I've slightly adapted your expression (it also supports now nested paths):

    (<img\b[^<>]*?src=['"].*?\/?.*?)([^.\/<>]*)(\.[^.\/<>]*?['"])([^><]*?\>)
    

    And then, you can replace it with this:

    $1$2$3 alt="$2"$4
    

    You can see it here (1) in action.


    To also block all entries containing alt="" you can use the following regular expression:

    (<img\b(?!.*alt=["'].*)[^<>]*?src=['"].*?\/?.*?)([^.\/<>]*)(\.[^.\/<>]*?['"])((?!.*alt=["'].*)[^><]*?\>)
    

    You can see it here (2) in action.

    alt=""

    Вы можете увидеть его здесь (1) в действии.


    Чтобы также заблокировать все записи, содержащие alt=""можно использовать следующее регулярное выражение:

    (<img\b(?!.*alt=["'].*)[^<>]*?src=['"].*?\/?.*?)([^.\/<>]*)(\.[^.\/<>]*?['"])((?!.*alt=["'].*)[^><]*?\>)
    

    Вы можете увидеть его здесь (2) в действии.