2012-12-07 2 views
1

큰 텍스트 블록에서 여러 번 대체하고 HTML 태그를 사용하여 단어를 하이퍼 링크로 변환하려고합니다. 나는 표현식 (\b)(word)(\b)을 사용하여 내가 원하는 단어를 찾는 데 대부분 시간을 사용할 수 있지만 하나의 문제는 괄호 (<>)가 경계로 간주된다는 것인데, 같은 문자열에서 다시 표현식을 실행할 때, 내가 이미 링크로 변환 한 단어와 일치합니다. 나는 표현식 ([\s-_()])(word)([\s-_()])에서 방금 해결 방법을 찾았지만 문자를 허용하지 않고 단어 주위에 어떤 문자가 허용되는지 알아야합니다. 그렇다면이 단어를 <>을 제외한 경계와 일치시키는 표현식을 사용할 수있는 방법이 있습니까?꺾쇠 괄호를 제외하고 단어 경계를 일치 시키십시오.

주 - 전역 플래그를 사용할 수 없습니다. 이것은 텍스트 블록 내에서 1과 모두 사이의 'n'대체를 수행하는 데 사용됩니다.

var str = "Plain planes are plain. Plain pork is plain. Plain pasta is plainly plain."; 
str = str.replace(/(\b)(plain)(\b)/, "$1<a href='www.plain.com'>$2</a>$3"); 
// this will result in the first instance of 'plain' becoming 
// a link to www.plain.com 

str = str.replace(/(\b)(plain)(\b)/, "$1<a href='www.plain.com'>$2</a>$3"); 
// this will NOT make the second instance of 'plain' into 
// a link to www.plain.com 
// instead, the 'plain' in the middle of the anchor tag 
// is matched and replaced causing nested anchor tags 
+2

를 사용하여 자바 스크립트 DOM을 걸어 텍스트 노드 만 정규식 교체를 적용 할 수 있습니다. [여기있다 방법] (http://stackoverflow.com/a/2525465/1633117) –

+0

텍스트 노드? 무슨 뜻인지 모르겠다. –

+0

DOM이 태그가 아닌 부분. 링크 된 스 니펫을 확인하십시오. 세 번째 줄을 대체 코드로 바꾸면 정상적으로 작동합니다. –

답변

0

당신은 같은 부정적인 lookbehind을 시도 할 수 :

(?<!<a href='www\.)(\b)(plain)(\b)

관련 문제