Regex для замены iframe ссылкой на youtube из iframes sr c в тексте - PullRequest
0 голосов
/ 04 марта 2020

У меня есть текст, который может содержать несколько iframes, и я собираюсь взять sr c из этого iframe и заменить весь iframe только текстом в этом sr c.

Например, если у меня есть это:

Some text here. After that, an iframe: <iframe src="//www.youtube.com/embed/GplWFSU3tLA"></iframe>

Я хочу получить это:

Some text here. After that, an iframe: //www.youtube.com/embed/GplWFSU3tLA

Вот что я пытался сделать: я написал регулярное выражение для iframe и регулярное выражение для ссылки на YouTube. Затем я беру текст, который хочу проанализировать, использую .replace, чтобы заменить все iframe, и внутри функции, которую я передаю x, которая соответствует iframe, и запускаю регулярное выражение youtube, чтобы найти только ссылку на youtube, после чего я верните ссылку (которая теоретически должна заменить соответствующий iframe).

Я подозреваю, что я либо написал один или оба из RegExp плохо, либо я неправильно использую .replace. Спасибо за любые идеи!

$(document).ready(function(){
  var iframeHunter = new RegExp(/<iframe(.+)<\/iframe>/g);
  var youtubeLinkHunter = new RegExp(/(http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+/mgi);
  
  var message_text = $("#textHolder").text();
  
  message_text = message_text.replace(iframeHunter, function myFunction(x){
         var youtubeLink = x.match(youtubeLinkHunter);
         return youtubeLink;
      });
  
  $("#replacedOutput").text(message_text);
  
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Text being parsed:
<p id="textHolder">Some text here. After that, an iframe: <iframe width="420" height="315" src="//www.youtube.com/embed/GplWFSU3tLA" frameborder="0" allowfullscreen></iframe></p>
Output:
<p id="replacedOutput"></p>

Я также воссоздал его в jsfiddle, с тем же кодом, что и выше: https://jsfiddle.net/e5vgscq0/

Изменить для уточнения: Мне не нужно заменять элемент iframe DOM ссылкой на YouTube, мне нужна новая строка, в которой все iframe были заменены на srcs youtube.

1 Ответ

0 голосов
/ 04 марта 2020

Вы всегда можете установить идентификатор в iframe.

<iframe id="some-id" ...></iframe>

В вашем jsfiddle установите LOAD TYPE на No wrap - bottom of <body>

const theIFrame = document.getElementById("some-id")

document.getElementById("replacedOutput").textContent = theIFrame.src;

В противном случае используйте regEx.

(www.youtube.com\/embed\/)(\w+)
<p id="textHolder">Som
e text here. After that, an iframe:  <iframe id="some-id" width="420" height="315" src="//www.youtube.com/embed/GplWFSU3tLA" frameborder="0" allowfullscreen></iframe>
</p>
const textHolder = document.getElementById("textHolder").innerHTML;
// Remove g to find first match only
const regEx = /(www.youtube.com\/embed\/)(\w+)/g
const match = textHolder.match(regEx);

// Note match will return an array for every match it finds.
// [0] www.youtube.com/embed/GplWFSU3tLA
console.log(match);

Игнорировать ниже

[0] Полный матч www.youtube.com/embed/GplWFSU3tLA
[1] Группа 1 www.youtube.com/embed/
[2] Группа 2 GplWFSU3tLA

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