Не сопоставлять URL-адреса не работает

#css #regex

#css #регулярное выражение

Вопрос:

У меня есть файл CSS, и мне нравится извлекать все URL-адреса в моем редакторе регулярных выражений, заменяя любой другой символ в моем файле CSS пустым characterd.

Файл css выглядит так:

 @font-face {
    font-family: 'font_name';
    src: url('http://my-site.ext/path/to/font/proximanova-light-webfont.eot');
    src: url('http://my-site.ext/path/to/font/proximanova-light-webfont.eot?#iefix') format('embedded-opentype'),url('http://my-site.ext/path/to/font/proximanova-light-webfont.woff') format('woff'),url('http://my-site.ext/path/to/font/proximanova-light-webfont.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;
}
 

и я использую следующее регулярное выражение для замены остальной части содержимого файла:

 (?!(http[^'] )).
 

Но не работает.

Конечный результат, который мне нравится, должен быть таким:

 http://my-site.ext/path/to/font/proximanova-light-webfont.eot
http://my-site.ext/path/to/font/proximanova-light-webfont.eot?#iefix
http://my-site.ext/path/to/font/proximanova-light-webfont.woff
http://my-site.ext/path/to/font/proximanova-light-webfont.ttf
 

Что-то не так с этим шаблоном?

Комментарии:

1. Почему бы не сопоставить URL-адреса напрямую?

2. Потому что я не использую какой-либо язык программирования. Я открыл свой редактор регулярных выражений, я вставил CSS в редактор, и мне нравится удалять все, кроме URL-адресов.

3. Какой редактор регулярных выражений вы используете?

4. regexr.com Автономная версия. Обратите внимание, что текущая онлайн-версия этого редактора не поддерживает замену. Если вы хотите увидеть редактор, который я использую в онлайн-версии, попробуйте это regexr.com/v1

5. IMO лучший автономный инструмент — RegexBuddy, и вы определенно можете найти совпадения. Вы можете попробовать это бесплатно.

Ответ №1:

Вот решение, которое будет работать в regex101 и, возможно, в других онлайн-инструментах.

Используйте это регулярное выражение (я избежал косых черт для регулярного выражения101):

Поиск:

 http[^'] (*SKIP)(*F)|.
 

Заменить: пустая строка

В демонстрации посмотрите на нижнюю панель (замены). Скопируйте, вставьте, и у вас есть ваши ссылки.

Как это работает

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

Если вы хотите оставить пробелы и новые строки, используйте это вместо:

 http[^'] (*SKIP)(*F)|S
 

Комментарии:

1. Потрясающе, рад это слышать! Добавлю краткое объяснение. 🙂