【问题标题】:YouTube Regex replacement C# breaking HTMLYouTube 正则表达式替换 C# 破坏 HTML
【发布时间】:2016-07-31 11:47:20
【问题描述】:

我正在使用此代码来放置带有图标的 YouTube URL,当您单击它时,它会打开一个显示视频的灯箱。

这是 C# 代码:

 const string pattern = @"(?:https?:\/\/)?(?:www\.)?(?:(?:(?:youtube.com\/watch\?[^?]*v=|youtu.be\/)([\w\-]+))(?:[^\s?]+)?)";
        const string replacement = "<a title='Click to watch the video' rel='nofollow' class='youtube-popup' href='//www.youtube.com/watch?v=$1' data-lity><span class='fa fa-play'></span>Watch</a>";

 var rgx = new Regex(pattern);
 var result = rgx.Replace(theinput, replacement);
  if(result != null && result != "")
  {
            return result;
  }

代码替换了视频 URL 并显示了图标,但也剪切了它之后的 HTML (&lt;p class="tags"&gt;&lt;/p&gt;),它被剪切为 class='tags'&gt;(两个段落标签都不存在,因此,它放置在它之前的包含链接的元素中。

我用同一段落中的两个链接对其进行了测试,当然它们之间用文本和空格分隔。

我怎样才能改变正则表达式来工作而不破坏这个特定示例的 HTML?

【问题讨论】:

  • 用正则表达式做这个是非常错误的。为什么不使用 HTML 解析器?

标签: c# asp.net regex


【解决方案1】:

这个正则表达式似乎对我有用。我不完全确定 YouTube URL 可以输入的所有格式。您的正则表达式并没有停止在 &lt; 并且一直持续到第一个空格(在 class 之前),因此它为什么会吃掉一些以下标签。另请注意,您需要转义 youtube.comyoutu.be 内部的 .

(?:https?:\/\/)?(?:www\.)?(?:(?:(?:youtube\.com\/watch\?[^?]*v=|youtu\.be\/)))([\w-]+)

另外请记住:You can't parse HTML with regex

【讨论】:

  • 它不是我的链接,而是它后面的部分,即

  • 有效。谢谢我的朋友。
猜你喜欢
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 2022-06-12
  • 1970-01-01
  • 2016-08-31
相关资源
最近更新 更多