Как обозначить "содержит эту последовательность символов" в регулярном выражении?
У меня есть такие строки
<link href = "css/style.min.css">
<script src = "js/script.min.js"></script>
<main class="page">
</main>
Хочу найти только пути к файлам с помощью регулярных выражений. У меня получилось найти весь текст в кавычках с помощью такого регулярного выражения:
(`|"|')(.*)(`|"|')
Теперь мне надо найти только тот текст, который содержит .css .js. Я попробовал сделать такое выражение:
(`|"|')[.jscss](.*)(`|"|')
но оно не исключило строку с class так как [] означают "содержит любой из этих символов". Есть ли выражение "содержит эту последовательность символов"?
Ответы (2 шт):
Такое выражение подошло, но оно с кучей скобок:
/'|`|"(.*\.js|.*\.css)(`|"|')/g
Если предложите более читаемый вариант, буду рад.
Update:
Со строками типа:
<link rel="stylesheet" type="text/css" href="css/style.min.css">
это не работает. Данное выражение выделяет все, начиная с первой кавычки, а мне нужен именно путь, поэтому, основываясь на ответе UModeL я дополнил его выражение, но опять получилась куча скобок:
([`"'])\w?:?((\.{1,2})?\/{1,2})?\/?(css|js).+?\.(css|js)\1/gi
Тут, учитывая, что файл стиля или скрипта находится в соответстующей папке, мы сначала ищем ее название и берем только те кавычки, в которых это название идет сразу после кавычки. Также учел случаи, когда может быть записан абсолютный и относительный пути. Если не хотите учитывать все варианты пути, то возьмите эту часть выражения:
/(css|js).+?\.(css|js)\1/gi
Да, Вы правы - можно чуть подсократить:
/[^`"']+?\.(css|js)/gi
Чтобы вместе с кавычками:
/([`"'])\S+?\.(css|js)\1/gi