2016-07-31 69 views
0

我使用此代碼將YouTube網址與一個圖標放在一起,當您點擊它時,它會打開一個顯示視頻的燈箱。YouTube正則表達式替換C#破解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,並顯示圖標,但也削減它(<p class="tags"></p>),它被削減至class='tags'>後的HTML(這兩個段落標記不目前,正因爲如此,它在一個元素放置之前包含鏈接。

我在同一段兩個環節,當然是有他們之間的文本和空格分開進行了測試。

哪有我改變了正則表達式的工作,而不是打破這個特定的例子的HTML?

+0

用正則表達式這樣做是非常錯誤的。爲什麼不使用HTML解析器? – spender

回答

1

這個正則表達式似乎爲我工作。我並不完全確定YouTube URLS可以使用的所有格式。您的Regex並沒有停在<,而是一直持續到第一個空間(class之前),因此它正在吃下面的一些標籤。另外請注意,你需要躲避.內的youtube.comyoutu.be

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

也請記住:You can't parse HTML with regex

+0

它不是我的鏈接,而是它後面的段落的一部分,

+0

作品。朋友,謝謝。 –