2014-02-13 6 views
0

그래서 JavaScript를 사용하여 텍스트 본문의 HTML 태그 외부의 모든 단어를 대체하고 싶습니다. 아래 설명을 확인하십시오.Regex가 정규식 패턴 외부의 모든 것을 매칭합니다.

나는이 변환하고 싶습니다이에 ...

<tag with-attr="something"></tag><tag>Text to match</tag><tag>Text to Match</tag> 

을 : 이제

<tag with-attr="something"></tag><tag>Manipulated Text</tag><tag>Manipulated Text</tag> 

, 나는 모든 태그와 그 포함 된 텍스트와 일치 할 수있는 정규 표현식을 가지고 :

\<[^>]*\> 

그러나 나는 표현 방법이 invert 인 방법을 모르겠다.

편집 또한
, 나는 내가 새로운 정보와 함께 다시 밖으로 작업 페이지를 태그 정보를 유지하고 침을 원하기 때문에,하지 splitreplace/match 기능을 사용하기 위해 찾고 있어요.

+1

match() 대신 split()을 사용하십시오. – dandavis

+0

당신은 다음을 요구합니다 :'\> [^ <] * \ <'? (switch> and <) – BMW

+0

@dandavis 전체 웹 페이지를 대체하고 있기 때문에 태그를 잃어 버리지 않으므로 나중에 태그 정보가 필요합니다. 바꾸기 기능을 사용하고 싶습니다. –

답변

1

괄호를 포함한 분열() 정규식 또한 배열 방법 만드는 비교적 간단한 "스트림 처리"를 사용 :

'<tag with-attr="something"></tag><tag>Text to match</tag>Text to Match<tag>' 
    .split(/(<[^>]+>)/).map(function(x,i){ 
    if(!(i%2) && x){ x= escape(x); } 
    return x; 
}).join(""); 

출력 예 :

"<tag with-attr="something"></tag><tag>Text%20to%20match</tag>Text%20to%20Match<tag>" 

이탈하면() 표시 할 그냥 textContent 실제로 변경되었습니다 ... 나는 당신의 예제에 가까운 입력 만 보증합니다. 중첩 또는 유효하지 않은 HTML은 정규식을 속일 수 있지만 난

+0

와우, 매우 재미있다 나는 그것을 지금 시험 할 것이다. –

+0

정말 고맙습니다. 제 솔루션에 대한 잘못된 위치를 찾고있었습니다. 오늘 새로운 것을 배웠습니다 :) –

+0

np. 나는 분할을 사용하는 것이 조금 이상하다고 생각하지만, js는 때로는 조금 별나다 ... – dandavis

0

뭔가 여기

/>([^<>]*\w)</ 

데모처럼 ... 다른 사람이 그를 가져올 것이라 확신합니다 : http://rubular.com/r/2QPLjOeMAu

지금 당신은 단지 필요

var str = '<tag with-attr="something"></tag><tag>Text to match</tag><tag>Text to Match</tag>'; 
var res = str.replace(/>([^<>]*\w)</g, '>Manipulated text<'); 
console.log(res); 
관련 문제