Проблема с регулярными выражениями заключается в том, что они иногда слишком строги, чем вам нужно. Если вы покажете нам свое настоящее не-отлично работающее регулярное выражение, я был бы в состоянии помочь вам больше.
Первый комментарий: браузеры склонны переносить большинство ошибок HTML/CSS (НЕ JavaScript, который является языком программирования, а не языком разметки).
Вы можете начать с токена background(-image)?
, чтобы заблокировать первую часть. Как действовать? Очень сложно ...
У вас всегда есть двоеточие, поэтому вы можете добавить к постоянной части токена, а затем, судя по вашему примеру (не из спецификаций CSS), переменное количество пробелов, за которыми следует токен url
. A переменное число пробелов [\w]*
, и это становится частью нашего регулярного выражения.
Я попытался это с RegexBuddy
background(-image)?: url[\s]*\([\s]*(?<url>[^\)]*)\);
К сожалению, он захватывает пробельные внутри URL-
Matched text: background-image: url('test/test.gif');
Match offset: 0
Match length: 39
Backreference 1: -image
Backreference 1 offset: 10
Backreference 1 length: 6
Backreference 2: 'test/test.gif'
Backreference 2 offset: 22
Backreference 2 length: 15
Matched text: background: url (test4/ test4.gif);
Match offset: 119
Match length: 39
Backreference 1:
Backreference 1 offset: -1
Backreference 1 length: 0
Backreference 2: test4/ test4.gif
Backreference 2 offset: 138
Backreference 2 length: 18
Итак, когда вы получите URL с этим необходимо обрезать строку. Я не мог исключить пробелы из группы url
, как из примера 4, однако должен соответствовать URL-адресу с пробелом в нем, и это не должно быть правильно, это примеры, как только у вас нет %20test4.gif
файл
[Редактировать] Я предпочитаю следующую версию регулярных выражений
background(-image)?: url[\s]*\([\s]*(?<url>[^\)]*)[\s]*\)[\s]*;
Он терпит больше пробельные
Последние два примера недействительны, по крайней мере, если я правильно прочитал спецификацию. Пробел разрешается только сразу после открытия и непосредственно перед закрытием. – Joey
Вероятно, недействителен в соответствии со спецификацией, но все браузеры будут обрабатывать их. – mtyson
Вам нужны только URL-адреса фонового изображения? Это не единственные места, где выполняется функция 'url()' CSS. – BoltClock