2014-07-17 2 views
1

HTML 강화 텍스트 뷰 (DTCoreText) 안에 HTML 콘텐츠를 표시해야하는 iOS 앱을 개발 중입니다. 고객이 특별한 HTML 주석으로 동영상을 제공하기로 결정한 이유는 태그로 전환해야하기 때문입니다.HTML 요소에 자리 표시 자 HTML 주석 바꾸기

주석 형식은

<!-- placeholder_video:url_of_video.mp4 -->

내가 전체 의견과 일치하는 내용을 추출하고 요소가 NSRegularExpression의 stringByReplacingMatchesInString을 통해 올바른 URL을 가리키는로 대체 정규식을 쓸 수있는 기대했다

과 같다 : options : range : withTemplate :하지만 나는 정규식을 이해할 수 없다.

내가 가지고 올 수있는 최선 주석의 내용 (또는 MP4의 URL을) 일치

(?<=<!-- placeholder_video:)(.*)(?=-->) 

,하지만 난 (그 대신 전체 의견 일치 서브 패턴과 내용을 추출 할 필요가 나중에 올바르게 이해하면 \ 1을 통해 액세스 할 수 있습니다. 따라서 바꾸기 패턴을 사용하여 신속하게 설명을 적절한 <video src="url_of_video.mp4"> 문자열로 바꿀 수 있습니다.

할 수 있습니까? 아니면 두 번에 걸쳐 시도하는 것이 더 낫지 않습니까? (전체 주석과 일치하는 다음 그 주석에 대한 다른 정규 표현식을 실행하여 URL을 추출하고 이전 URL을 대체하십시오.)

+2

"댓글 형식이 그대로입니다."... ...? 질문에 다소 중요한 부분을 잊어 버린 것 같아요;) –

+0

죄송합니다. 고정 –

+0

내 답변에서 바로 추측 한 것처럼 보입니다. 내가 게시 한 답변은 당신을 위해 일해야합니다. Jsfiddle 예제 (http://jsfiddle.net/72WeZ/)와 함께 페이지의 javascript를 사용하여 끝에 완전한 예제가 있습니다. 이 예제는 단지 html을 $ ("# example")로 바꾸고 싶다면 그 결과에 대한 경고를줍니다 .html (str2); –

답변

1

질문의 모양에 따라 (주석이 어떻게 보이는지 예를 붙여 넣는 것을 잊어 버렸을 때) 어렵습니다. .

을 좋은 대답을하지만 당신이 언급 이후 :..

(?<=<!-- placeholder_video:)(.*)(?=-->) 

주석의 내용을 가져 오기 위해 관리하는 것입니다 그리고 당신이 말하는 때문에 당신이 원하는 모든 전체 코멘트를 캡처하는 것입니다

그런 다음이 사실을 올바르게 이해하면 나는 당신이 정말로해야 할 일은 전체 표현에 캡쳐 그룹을 추가하고 룩백과 미리보기를 버리는 것입니다.

(<!-- placeholder_video:\s*(.*)\s*-->) 

는 다음과 같이 테스트 (어쩌면 또한 선행 및 후행 공백을 잡아 피) :

1: <!-- placeholder_video: url_of_video.mp4 --> 
2: url_of_video.mp4 

당신은 할 수 있습니다 내가이 개 그룹을 얻을 것이다

<!-- placeholder_video: url_of_video.mp4 --> 

을 원할 경우 그룹 이름을 지정하여 참조를 쉽게 할 수 있습니다.

(?<comment><!-- placeholder_video:\s*(?<url>.*)\s*-->) 

당신이 정규 표현식 내에서 그룹 N 을 참조하기 위해 \ n을 사용할 수 있다는 것 또한 사실이다.

첫 번째 캡처 그룹을 단일 정규식에서 두 번째 캡처 그룹으로 바꿀 계획이라면 어떻게 할 것인가는 언어에 따라 다릅니다. C#과 같은 일부 언어에서는 하나의 옵션 인 직접 교체 메소드를 제공 할 수 있습니다. 하지만 여기에 C#이 없다고 가정합니다.

자바에서는 단순히 $ n을 사용하여 일치하는 n 번째 그룹을 대체 된 값으로 참조 할 수 있습니다. (당신은 또한 기능을 제공 할 수 있습니다,하지만 당신은 할 필요가 없습니다)

JS에서 전체 작업 예 (jQuery를 사용하지만 필요하지) :

<div id="example"> 
    <!-- placeholder_video: url_of_video.mp4 --> 
</div> 

<script> 
    var str = $("#example").html(); 
    var str2 = str.replace(/(<!-- placeholder_video:\s*(.*)\s*-->)/g, "<video src=\"$2\">"); 
    alert(str2); 
</script> 

당신은 작업 jsfiddle 예를 여기에서 볼 수 있습니다 : http://jsfiddle.net/72WeZ/

+0

정확히 내가 필요로했던 것이 었습니다! 고맙습니다. –

+0

어떻게 파일 이름의 뒤 공백을 무시하고 무시합니까? 나는 표현식에서 그들을 하드 코드 할 수 있지만 완전히 끝나기 전에 URL 끝에 공백이 있다는 것을 확신하지는 않는다. -> –

+1

이것은 정규 표현식에 이미 있어야한다. \ s * 기본적으로 0 개 이상의 공백이 있습니다. URL에 공백이 없기 때문에 확실하게 알고 싶으면 (. *)를 ([^ \ s] *) (으)로 변경할 수 있습니다. 그러나 나는 그것이 이미 작동해야한다고 생각합니다. –

관련 문제