All
Мне нужно написать регулярное выражение для выполнения следующих операций
заменить
(A)
src ="/folder/image.jpg"
или
src="http://www.mydomain.com/folder/image.jpg"
с
src="/cache/getCacheItem.aspx?source_url=http://www.mydomain.com/folder/image.jpg"
(B)
href="/folder/file.zip"
или
href="http://www.mydomain.com/folder/file.zip"
с
href="/cache/getCaccheItem.aspx?source_url=http://www.mydomain.com/folder/file.zip
Я знаю, что могу использовать
(src|href).*?=['|\"](?<url>.*?)['|\"]
со значением замены
$1="/legacy_integration/cache/getCacheItem.aspx?source_url=$2"
чтобы поймать атрибуты src = ... и href = .... Однако мне нужно фильтровать по расширению файла - сопоставлять только допустимые расширения изображений, такие как jpg, png, gif, и сопоставлять только расширения href, такие как zip и pdf.
Есть предложения? Проблема может быть кратко изложена следующим образом: измените приведенное выше выражение, чтобы оно соответствовало только определенным расширениям файлов, и разрешите вставку домена http://www.mydomain.com/ только в том случае, если исходный URL-адрес был относительным, таким образом гарантируя, что выходной текст содержит домен ровно один раз.
Нужно ли выполнять это, используя два разных регулярных выражения, одно для исходного текста, включая домен, и другое без? Или я могу каким-то образом использовать оператор условного совпадения, который в сочетании с выражением замены будет вставлять домен или нет, в зависимости от того, содержит ли соответствующий текст домен?
Я знаю, что могу выполнить это с помощью пользовательского оценщика совпадений, но кажется, что может быть быстрее / эффективнее сделать это в самом регулярном выражении.
Предложения / комментарии