2011-02-11 70 views
1

我正在尋找一個正則表達式,這將允許我在一個字符串中獲取所有javscript和css鏈接標籤,以便我可以從DotNetNuke中剝離某些標籤(是的,我知道.... ouch!)頁面上重寫渲染事件。正則表達式來獲取所有javascript標籤c#

我知道html敏捷包我甚至讀過Jeff Atwoods blog entry,但不幸的是我沒有第三方庫的奢華。

任何幫助,將不勝感激。

編輯,我給了這個嘗試得到一個JavaScript條目,但它沒有奏效。正則表達式對我來說是一種黑暗的藝術。

updatedPageSource = Regex.Replace(
pageSource, 
String.Format("<script type=\"text/javascript\" src=\".*?{0}\"></script>", 
name), "", RegexOptions.IgnoreCase); 
+1

不要這樣做! `正則表達式== ouch`! – 2011-02-11 13:52:23

+0

「不幸的是,我沒有第三方圖書館的奢侈品。」小心解釋爲什麼? – marcog 2011-02-11 13:54:16

回答

1

我對此有一些評論,你的正則表達式是接近,下面已經過測試工作

<script type="text/javascript" src=".*myfile.js"></script> 

我用下面的測試輸入

<script type="text/javascript" src="myfile.js"></script> 
<script type="text/javascript" src="/test/myfile.js"></script> 
<script type="text/javascript" src="/test/Looky/myfile.js"></script> 

然而,我將謹慎採取這種方法,它需要時間來解析,可能會出錯,等等...

1

免責聲明:R egex + HTML = ouch!

您的問題可能是您不是從name(例如,點元字符'。')轉義正則表達式元字符。你可能想試試這個:

updatedPageSource = Regex.Replace(
    pageSource, 
    String.Format("<script\\s+type=\"text/javascript\"\\s+src=\".*?{0}\"\\s*>\\s*</script>", Regex.Escape(name)), 
    "", 
    RegexOptions.IgnoreCase); 

// Just one of the many reasons why you don't mix Regex with HTML: 
updatedPageSource = Regex.Replace(
    updatedPageSource, 
    String.Format("<script\\s+src=\".*?{0}\"\\s+type=\"text/javascript\"\\s*>\\s*</script>", Regex.Escape(name)), 
    "", 
    RegexOptions.IgnoreCase); 

我還在這裏和那裏添加了可選的空格。

0

不要忘記說明諸如空白,其他屬性,屬性的不同順序(即src="foo" type="bar" vs type="bar" src="foo")和"'引用。也許這個?

@"<\s*script\b.*?\bsrc=(""|').*?{0}\1\b.*?(/>|>\s*</\s*script\s*>)" 

我繼續拿出type屬性。如果你有文件名,你知道它是什麼類型的腳本;再加上,這佔標籤,其中src標籤至上,或者他們使用廢棄language標籤,或者乾脆省略type(它應該在那裏,但它並不總是)。請注意,我使用的是懶惰的.*?,因此它與頁面中的最後一個</script>不一致。