Как избежать применения регулярного выражения для поиска и замены более одного раза? - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть это регулярное выражение замены, которое преобразует каждый URL YouTube в Iframe:

str.replace(/((?:https?:\/\/)?(?:www\.)? (?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?)/gi, '<iframe src="https://youtube.com/embed/$2" frameborder="0" allowfullscreen="true"></iframe>');

Но этот код будет действовать, даже если он уже был применен ранее к этому Iframe.
Таким образом, код нарушается каждый раз, когда я выполняю эту функцию.

Есть ли способ игнорировать ссылку, если между ней уже есть src=""?

1 Ответ

0 голосов
/ 21 февраля 2020

Не используйте регулярные выражения для изменения HTML

Обратите внимание, что приведенный ниже код не будет работать в изолированной программной среде Stackexchange

$("[href]").each(function() {
  if (this.href.indexOf("youtu")) {
    let url = new URL(this.href);
    const v = url.searchParams.get("v");
    $(this).replaceWith('<iframe src="https://youtube.com/embed/v='+v+'" frameborder="0" allowfullscreen="true"></iframe>');
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="https://youtu.be/-D5YGTkTBH4">Watch</a>
<iframe width="560" height="315" src="https://www.youtube.com/embed/-D5YGTkTBH4" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...