Получить изображения только с относительным путем | Регулярное выражение - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь извлечь из строки изображения, имеющие относительный путь ('/folder/image.jpg', 'someimage.png'), но не абсолютный путь (https://www.example.com/abc.jpg), а затем отправить все изображения в некоторый массив.

Текущий массив: ["123.png", "abc.jpg", "xyz.jpg", "http://example.com/abc.jpg", "https://example.com/xyz.jpg", "popcorn.png"]

Ожидаемый массив: ["123.png", "abc.jpg", "xyz.jpg", "popcorn.png"]

ТЕСТ: https://codepen.io/Ashish9342/pen/qLwWYz?editors=0011

var content = 'Lorem ipsum dolor sit amet, consectetur <img style="height:10px" src="123.png"/> adipiscing elit. Praesent sed orci vitae nulla ultricies vehicula. Donec ex arcu, ultricies at nisl et, convallis lobortis nisl. Pellentesque aliquet luctus mollis. <img src="abc.jpg"/> Ut vehicula, lectus et iaculis molestie, est purus dignissim magna, sit amet tincidunt quam ante varius neque. Pellentesque quis ligula <img class="fantom" src="xyz.jpg"/> in risus efficitur ullamcorper. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis porta, eros at sollicitudin viverra, nisl lectus dapibus erat, id rutrum augue augue sed lectus. <img src="http://example.com/abc.jpg"/> Nullam felis augue, placerat vel mattis et, viverra sit amet elit. Cras pulvinar iaculis massa, sed consectetur <img src="https://example.com/xyz.jpg"/> ligula luctus non. Donec vel augue mattis tellus rutrum ultricies et suscipit  <img src="popcorn.png" alt="pop corn"/> erat.'

function getRelativePathImages(content) {
  if (content && content.search('<img')) {
    const urls = [];
    let m;
    const rex = /<img[^>]+src="([^">]+)/g;
    // const rex = /<img[^>]+src="([^http">]+)/g;

    while (m = rex.exec(content)) {
      if (urls.indexOf(m[1]) < 0) {
        urls.push(m[1]);
      }
    }
    console.log(urls);
  }
}

getRelativePathImages(content);

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Нет необходимости в регулярном выражении, если пути, которые вы не хотите, начинаются с http. Просто используйте startsWith метод:

s = "http://example.com/abc.jpg";
if(!s.startsWith("http")){
  // add s to you array of URLs
}
0 голосов
/ 16 января 2019

Просто имейте это отрицательное предвидение в вашем регулярном выражении (?!http) после src=", которое отклонит любой URL, начинающийся с http, и изменит ваше регулярное выражение на

/<img[^>]+src="(?!http)([^">]+)/g

var content = 'Lorem ipsum dolor sit amet, consectetur <img style="height:10px" src="123.png"/> adipiscing elit. Praesent sed orci vitae nulla ultricies vehicula. Donec ex arcu, ultricies at nisl et, convallis lobortis nisl. Pellentesque aliquet luctus mollis. <img src="abc.jpg"/> Ut vehicula, lectus et iaculis molestie, est purus dignissim magna, sit amet tincidunt quam ante varius neque. Pellentesque quis ligula <img class="fantom" src="xyz.jpg"/> in risus efficitur ullamcorper. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis porta, eros at sollicitudin viverra, nisl lectus dapibus erat, id rutrum augue augue sed lectus. <img src="http://example.com/abc.jpg"/> Nullam felis augue, placerat vel mattis et, viverra sit amet elit. Cras pulvinar iaculis massa, sed consectetur <img src="https://example.com/xyz.jpg"/> ligula luctus non. Donec vel augue mattis tellus rutrum ultricies et suscipit  <img src="popcorn.png" alt="pop corn"/> erat.'

function getRelativePathImages(content) {
  if (content && content.search('<img')) {
    const urls = [];
    let m;
    const rex = /<img[^>]+src="(?!http)([^">]+)/g;
    // const rex = /<img[^>]+src="([^http">]+)/g;

    while (m = rex.exec(content)) {
      if (urls.indexOf(m[1]) < 0) {
        urls.push(m[1]);
      }
    }
    console.log(urls);
  }
}

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