2017-11-14 22 views
2

나는 문자열, 검색어에 소요 CFScript를, 옵션 강조 옵션을 사용하여 검색어와 문자열을 반환하고 강조 :강조 검색 결과 문자열의 경우 문제

<cfscript> 
string function highlightKeywords(required string str, required string keywords, struct highlight){ 
    var keyword  = ""; 
    var replacement = ""; 

    param name="highlight.tag"   default="span"; 
    param name="highlight.attributes" default="style='color:rgb(255,102,0);'"; 

    for (var index=1; index <= listLen(arguments.keywords, " "); index++){ 
     keyword = ReReplace(listGetAt(arguments.keywords, index, " "), "\(|\)", "", "all"); 
     replacement = "<#highlight.tag#"; 
     if (len(highlight.attributes)){ 
      replacement &= " #highlight.attributes#"; 
     } 
     replacement &= ">" & keyword & "</#highlight.tag#>"; 

     arguments.str = reReplaceNoCase(arguments.str, "\b#keyword#\b", replacement, "all"); 
    } 
    return arguments.str; 
} 
</cfscript> 

모든 것이 잘 동작하는 것, 하나의 문제는 제외. 원래 문자열의 대소 문자를 변경합니다.

예를 들어 사용자가 "강조 표시 검색"을 검색하고 원래 문자열이 "강조 표시 검색 테스트"로 저장되어있는 경우. "강조 표시 검색 테스트"가 반환 될 것으로 예상됩니다. 대신 "강조 검색 테스트"를 반환했습니다. 그것은 원래 사건을 유지하는 대신 사용자가 입력 한 것과 대소 문자를 교체했습니다. 누군가 나를 도와 줄 수 있습니까? 미리 감사드립니다.

추가 참고 : CF는 역 참조로 작동합니다.

+0

'교체 & = ""> & 키워드 & ""; '=>'대체 & = "> $ & lt;/# highlight.tag #> "; ' –

+0

@ WiktorStribiżew 시도했지만 작동하지 않습니다. 강조 표시된 단어는 '$ &'가되었습니다. 나는 'This is ** $ & ** Testing'이다. – Jack

+0

@ WiktorStribiżew 미안하지만 당신이 의미하는 바를 이해하지 못한다. 솔루션으로 추가 할 수 있습니까? – Jack

답변

3

당신은 캡처"\b(#keyword#)\b"와 키워드 (캡처 괄호주의)이 그룹 1 값으로 \1 역 참조로 교체 실제로 키워드의 일치 변형으로 대체 할 수 있습니다.

사용

replacement &= ">\1</#highlight.tag#>" 

다음

arguments.str = reReplaceNoCase(arguments.str, "\b(#keyword#)\b", replacement, "all")