2011-02-11 42 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>不一致。