2016-05-05 4 views
-4

Я пытаюсь сопоставить каждый атрибут src, который заканчивается jpg или png или gif, и извлекать строку src внутри. Я не уверен, что следующее регулярное выражение, которое я придумал, правильно, но оно дает мне атрибуты src с адресами. Мой вопрос связан с возможной проблемой следующего регулярного выражения и как я могу извлечь только строку src.Regex для извлечения атрибута src

/src\s*=\s*(["'][^"']+(jpg|png|gif)\b)/g; 
+0

Я голосующий, чтобы закрыть этот вопрос как не по теме, потому что он просит просмотреть код. Это может быть по теме (после некоторого редактирования) на [этом сайте-партнере] (http://codereview.stackexchange.com/help/on-topic). – Quentin

+0

Почему люди голосуют? Дайте мне знать, чтобы я мог перефразировать мой вопрос? – sawa

+0

Я не вижу четкого различия между запросом обзора кода и вопросом о проблеме программирования, о которой я не очень разбираюсь. Может ли кто-нибудь объяснить, чтобы я мог понять? – sawa

ответ

1

Прежде всего, ваше регулярное выражение пытается сделать слишком много. Начните с того, что-то вроде:

function img_find() { 
    var imgs = document.getElementsByTagName("img"); 
    var imgSrcs = []; 

    for (var i = 0; i < imgs.length; i++) { 
     imgSrcs.push(imgs[i].src); 
    } 

    return imgSrcs; 
} 

Теперь ваше регулярное выражение имеет гораздо меньше проблем. (Никаких пробелов, одного против двойных кавычек, и так далее.)

this Пожалуйста, прочтите, и нет (для очень простых ситуаций, за исключением) не пытаться использовать регулярные выражения для разбора HTML сырца :)

Так что, учитывая массив источников изображения, вам просто нужно выбрать jpg/png/gif из них:

/(jpg|png|gif)$)/i; 

А затем захватить их имена файлов без расширения: (Есть много способов сделать это, вот только одна вещь Я бросил вместе ...)

/(.*)\.[^.]+)/; 
+0

Спасибо за ваше объяснение. Причина, по которой я использую регулярное выражение, заключается в том, что я пытаюсь собрать ссылки на изображения, встроенные в код javascript, которые я не могу проанализировать для тегов изображений. Поскольку я не знаком с синтаксисом regex, я до сих пор не знаю, как я могу извлечь только часть адреса после сопоставления 'src' в начале. Я уверен, что это связано с основами, но не могли бы вы объяснить мне об этом? – sawa

+0

'код javascript не может быть проанализирован для тегов изображений' - Да, это возможно. Regex не является правильным ответом на эту проблему из-за вышеупомянутых проблем, таких как пробелы, одиночные и двойные кавычки и т. Д. Используйте DOM, как я предложил, чтобы получить источник изображения. * Затем * используйте регулярное выражение. Любое решение с чистым регулярным выражением будет иметь раздражающие ошибки в краевых случаях, и их будет чрезвычайно сложно читать и понимать. –

+0

Или если вы хотите полностью игнорировать мой совет, просто используйте: '/src\s*=\s*(["']([^"']+)\.(jpg|png|gif)\b)/g; ', а вторая группа совпадений будет содержать имя файла. Но, как я продолжаю говорить, существует сто способов, что это может пойти не так ... Например, как насчет файла с именем 'thisisnota.png.exe'? Или, что, если используются котировки unicode (https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html)? Или, что, если файл называется '' file_with_a _'_ character.png? '? ..... Ни одна из этих вещей не была бы проблемой, если бы вы сделали это правильно, как я предложил. –

Смежные вопросы