2012-02-28 1 views
0

본인은 HTML 콘텐츠를 보유하고 있으며이를 텍스트 콘텐츠로 가져오고 있습니다.어떻게 괄호로 묶은 하위 문자열 일치에 정규식을 적용합니까?

string='<img src="Randomz" alt="Randomz Image">Randomz is the name of the image</img><img src="Randomz" alt="Randomz Image">Randomz is the name of the image</img><img src="Randomz" alt="Randomz Image">Randomz is the name of the image</img><img src="Randomz" alt="Randomz Image">Randomz is the name of the image</img>' 
re=(/([<][^<]+>)([^<]+)([<][^<]+>)/g); 
newstr=string.replace(re,"$1$2$3"); 

이렇게하면 원래 문자열을 돌려줍니다.

내 문제는 내가 즉)

newstr=string.replace(re,"$1$2$3" 전에 다른 string.replace(regex,$2)을 적용 할 필요가있다, 나는 최종 솔루션을 적용하기 전에 매개 변수화 캐치에 다른 정규식을 적용해야합니다.

+0

항상 img 태그 일 필요는 없습니다. 아무거나 수 있습니다. 또한 내 문제는 텍스트 콘텐츠 만 바꾸고 주문을 그대로 유지하는 것입니다. – Nishant

+1

귀하의 예제는 하위 노드 또는 닫기 태그를 가질 수없는 요소에 대해 하위 텍스트 노드 및 닫기 태그를 사용합니다. – kennebec

+1

RegExp를 사용하여 HTML을 구문 분석하지 마십시오! 이미 오류가있는 것 같습니다. '<[^>] +>'(아니면 단지'<.+?>')이 될까요? – Bergi

답변

4
당신이 무슨 일을하는지 확실하지

,하지만 난 당신이 replace 콜백을 찾고있는 것 같아요 : 보조 노트로

string='<img src="Randomz" alt="Randomz Image">Randomz is the name of the image</img><img src="Random' 
re=(/([<][^<]+>)([^<]+)([<][^<]+>)/g); 
newstr=string.replace(re, function($0, $1, $2, $3) { 
    $2 = do_something_with($2); 
    return $1 + $2 + $3; 
}); 

는 정규 표현식은 HTML 변환을위한 최고의 도구가 아닙니다.

+0

정확하게 감사합니다. 이것은 깨끗한 HTML 코드에 대한 간단한 해킹입니다. HTML 변환에 좋지 않다는 것을 이해합니다. – Nishant

+0

@Nishant - 첫 번째 및 세 번째 그룹에서'[^ <]' to '[^>]을 (를) 변경해야합니다. 그렇지 않으면 제대로 작동하지 않습니다. 위의 코드를 여러 HTML 요소가있는 문서에 적용하고 $ 1, $ 2 등으로 돌아 오는 내용을 검사하면 내 뜻을 알 수 있습니다. –

관련 문제