正则表达式获取所有javascript标签c#

时间:2011-02-11 13:51:13

标签: c# regex

我正在寻找一个正则表达式,它允许我在字符串中获取所有javscript和css链接标记,以便我可以从被忽略的DotNetNuke(是的,我知道......哎哟!)页面上剥离某些标记渲染事件。

我知道html敏捷包我甚至读过Jeff Atwoods blog entry但不幸的是我没有第三方库的奢侈品。

任何帮助都将不胜感激。

编辑,我尝试了一下javascript条目,但它没有用。正则表达式对我来说是一种黑暗的艺术。

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

3 个答案:

答案 0 :(得分:1)

我对此有一些评论,您的RegEx已经关闭,以下内容已经过测试

<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 :(得分:1)

免责声明:Regex + HTML =哎哟!

您的问题可能是您没有从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);

我还在这里和那里添加了可选的空格。

答案 2 :(得分:0)

不要忘记考虑空格,其他属性,不同属性顺序(即src="foo" type="bar" vs type="bar" src="foo")和" vs '引用等内容。也许这个?

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

我继续并取出了type属性。如果你有文件名,你知道它是什么类型的脚本;另外,这会考虑src标记首先出现的标记,或者他们使用已弃用的language标记,或者他们完全忽略了type(它应该在那里,但它不是总是)。请注意,我使用的是惰性.*?,因此它与页面中的最后一个</script>不匹配。

相关问题