【发布时间】: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 (<p class="tags"></p>),它被剪切为 class='tags'>(两个段落标签都不存在,因此,它放置在它之前的包含链接的元素中。
我用同一段落中的两个链接对其进行了测试,当然它们之间用文本和空格分隔。
我怎样才能改变正则表达式来工作而不破坏这个特定示例的 HTML?
【问题讨论】:
-
用正则表达式做这个是非常错误的。为什么不使用 HTML 解析器?