2017-01-04 3 views
2

조금 강조 표시하려고합니다. 내가 가진 문제는 $ 1에 일치 항목을 삽입하지 않는다는 것입니다. 당신이 볼 수있는 내 기능

getMatch(str, search) { 
    let result = str.replace(new RegExp(search, 'gi'), '<span class="match">$1</span>'); 
    return result; 
} 

처럼 보이는이 경기를 마무리해야한다. 그러나 그렇지 않습니다. 여기 예를 들어 내가 그것을 사용하는 방법 :

My string <span class="match">with</span> highlighting.

하지만 난 그냥 얻을 :

let string = 'My string with higlighting.'; 
let match = getMatch(string, 'With'); 

내 예상 결과는

My string <span class="match">$1</span> highlighting.

그래서 $ 1 대체되지 않았습니다를 일치에 의해.

어떻게 해결할 수 있습니까?

+0

을 당신이'와 전체 경기를 마무리 할 생각 스팬'맞지? 그런 다음'$ 1'을'$ &'로 대체하십시오. –

+0

이미 시도해 봤습니다. 문제는 내가 대소 문자를 구별하지 않지만 문자열이 더 낮거나 대문자라는 것입니다. 그래서 검색 문자열로 바꿀 수는 없습니다. 일치 항목으로 바꾸어야합니다. – mastercheef85

+0

'With'는 캡처 그룹이 없으므로 '$ 1'은 리터럴 문자열로 구문 분석됩니다. '$ &'는 전체 일치 값 *을 교체에 삽입합니다. –

답변

2

'With'에는 캡처 그룹이 없으므로 $1은 리터럴 문자열로 구문 분석됩니다.

일치 항목 전체를 span (으)로 바꾸려면 $1$&으로 바꿉니다.

getMatch(str, search) { 
    let result = str.replace(new RegExp(search, 'gi'), '<span class="match">$&</span>'); 
    return result; 
} 

MDN replace reference를 참조하십시오

$& 삽입 일치하는 하위 문자열.

let string = 'My string with higlighting.'; 
let match = getMatch(string, '(With)'); 

출력 될 것입니다 :

+0

고맙습니다. – mastercheef85

1

다음은 캡처 그룹 아닙니다, 당신은 괄호를 추가하여 변환한다

My string <span class="match">with</span> higlighting. 
관련 문제