2016-07-31 13 views
0

私はこのコードを使用して、YouTube URLをクリックすると、アイコンをクリックすると動画を表示するライトボックスが開きます。YouTube Regex replacement C#breaking HTML

ここでは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'>にカットします(両方の段落タグがされていません現在、そしてそのためには、リンクが含まれてその前の要素に配置します。

私はもちろん、それらの間のテキストとスペースで区切って同じ段落内の2つのリンク、でそれをテストした。

どのようにすることができます正規表現を変更してこの特定の例のHTMLを壊さないようにしましたか?

+0

は非常に見当違いです。なぜHTMLパーサを使用しないのですか? – spender

答えて

1

このRegexは私にとってはうまくいくようです。 Regexは<で停止しておらず、最初のスペース(classの前)まで続いていたので、次のタグのいくつかを食べていたのはなぜですか。また、あなたが.(?:https?:\/\/)?(?:www\.)?(?:(?:(?:youtube\.com\/watch\?[^?]*v=|youtu\.be\/)))([\w-]+)

youtube.comの内側と youtu.be

をエスケープする必要があることに注意してください。また心に留めておいてください:正規表現でこれをやってYou can't parse HTML with regex

+0

それは東の私のリンクではなく、それの後の段落の一部、

+0

作品。ありがとね。 –