2011-02-11 3 views
1

DotNetNuke에서 특정 태그를 제거 할 수 있도록 모든 javscript 및 CSS 링크 태그를 문자열에 넣을 수있는 정규식을 찾고 있습니다 (예 .... ouch!) 오버라이드 된 렌더 이벤트 페이지.Regex 모든 자바 스크립트 태그를 얻으려면 C#

나는 심지어 html 민첩성 팩에 대해서 알고 있는데, 심지어 Jeff Atwoods blog entry을 읽었지만, 불행히도 제 3 자 라이브러리의 고급 스러움이 없습니다.

도움을 주시면 감사하겠습니다.

편집,이 자바 스크립트 항목을 얻으려고했지만 작동하지 않았다. 정규 표현식은 나에게 어두운 예술이다.

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

하지 마십시오! 'Regex == ouch'! –

+0

"불행히도 제 3 자 라이브러리의 고급 스러움이 없습니다." 그 이유를 설명하는 배려? – marcog

+0

@marcog 오늘 끝내야하는 프로젝트를 진행하고 있습니다. 제 3 자 솔루션을 소개한다면 확인이 필요한지 등을 확인해야합니다. –

답변

1

나는이에 대한 몇 가지 의견이, 당신의 정규식 나는이 내가

<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> 

그러나 다음 테스트 입력을 사용

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

작동하도록 테스트되었습니다 다음, 가까운 이 접근법에주의를 기울여야하고 구문 분석하는 데 시간이 걸리며 오류가 발생할 수 있습니다.

1

면책 조항 : R egex + HTML = ouch!

Regex 메타 문자를 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); 

여기에 공백을 선택적으로 추가했습니다.

+3

당신의 코드에서 탐욕스러운'. *'조심해. 마지막으로 찾을 수있는'' 태그와 일치 할 것입니다. 당신은'. *?'를 원합니다. –

+0

감사합니다, 우리는 매일 새로운 것을 배웁니다. . 참조 : [Regex : Greedy vs Lazy] (http://codeasp.net/blogs/raghav_khunger/microsoft-net/935/regex-greedy-vs-lazy) – MarioVW

+1

오 ... 그리고 '\ s' 니즈 어느 쪽이든, 또는'@ "..." "을 사용 합니다만, 두 배로'''를 이스케이프해야합니다. :) –

0

는 공백 같은 것들, 다른 속성, 다른 속성의 주문 (type="bar" src="foo" 대 즉 src="foo" type="bar"), 및 인용 '"을 고려하는 것을 잊지 마십시오. 어쩌면?

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

나는 type 속성을 가져갔습니다. 파일 이름을 알고 있다면 어쨌든 어떤 유형의 스크립트인지 알 수 있습니다. 게다가 이것은 src 태그가 가장 먼저 나온 태그를 사용하거나 더 이상 사용되지 않는 language 태그를 사용하거나, type을 생략했습니다 (항상 있어야하는 것은 아니지만). 페이지에서 마지막으로 </script>까지와 일치하지 않도록 게으른 .*?을 사용하고 있습니다.

관련 문제