RegEx для поиска URL-адресов внутри строки - PullRequest
1 голос
/ 19 апреля 2019

У меня есть строка

<h1>hello/h1>
<script src="http://www.test.com/file1.js"></script>
<script src="http://www.test.com/file2.js"></script>
<p>bye</p>

, и мне нужно сгенерировать массив с URL-адресами, найденными в строке.

['http://www.test.com/file1.js', 'http://www.test.com/file2.js']

также мне нужно заменить всю строку (включаятеги сценарий теги) с ничего.

это то, что я до сих пор, чтобы найти URL

^(<script src=")(.*)("><\/script>)$

проблема в том, что он работает только с

<script src="http://www.test.com/file1.js"></script>

если я определю свои сценарии следующим образом

<script id="something" src="http://www.test.com/file1.js"></script>

, это не сработает.

Ответы [ 4 ]

3 голосов
/ 19 апреля 2019

Попробуйте вместо этого использовать правильный анализатор HTML, например cheerio: найдите <script> теги, удалите их и поместите их src в массив:

const cheerio = require('cheerio');

const htmlStr = `<h1>hello/h1>
<script src="http://www.test.com/file1.js"></script>
<script src="http://www.test.com/file2.js"></script>
<p>bye</p>`;
const $ = cheerio.load(htmlStr);

const urls = [];
$('script').each((_, script) => {
  urls.push(script.src);
  $(script).remove();
});
const result = $('body').html();
console.log(result);
0 голосов
/ 19 апреля 2019

Используйте этот insted

^(<script )(.*)(src=")(.*)("><\/script>)$

, а 4-ые группы - это URL

или ^(?:<script )(?:.*)(?:src=")(.*)(?:"><\/script>)$ для использования групп без захвата.

0 голосов
/ 19 апреля 2019

Этот RegEx может помочь вам получить эти URL:

^<.+="(.+)"><\/.+>$

. Он создает одну группу, в которой находятся ваши целевые URL, и фильтрует все остальное.Он также работает с тегами <a> и другими аналогичными тегами с шаблонами открытия и закрытия.

enter image description here

0 голосов
/ 19 апреля 2019

Чтобы получить только URL, вы можете сделать:

^<script.*?src="(.*)".*?><\/script>$

Это ловит случаи, когда атрибуты находятся перед и после атрибута src.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...