我正在寻找一个正则表达式,它允许我在字符串中获取所有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);
答案 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>
不匹配。