2016-06-09 3 views
0

나는 굵은 문장에서 특정 단어를 찾는다. 나는 정규 표현식의 상당 부분을 이해하지 못한다. 그리고 이것은 내 코드가 ALMOST가 아닌 것이다.문자열에서 문자열을 찾아서 regexp로 바꾸기

function updateHaystack(input, needle) { 
     return input.replace(new RegExp('(^|\\s)(\' + needle + \')(|$)','ig'), '$1<b>$2</b>$3'); 
} 

이것은

  • 풍부하게 -> 다음에, 풍부주의 그것을 호출합니다.
  • acquiesce -> 정권의 끝은 이 무덤에을 묵인합니다! 단어의 주위에 (단어가 굵은 글씨가되지 않습니다)/전에 특수 문자가있을 때

그러나, 그것은 작동하지 않습니다

  • 장치 -> 그 검색합니다. - ...기구.
  • 경매 - 글쎄, "경매가"내 이력서에 멋진 일이 될 것 같아.
  • 소란스런 소리를 내며 움직이다 -> (흔들 거리는)
  • 손잡이 -> [손잡이 딸랑이] 그것 때문에 당신의 정규식에서이 부분의 무슨 일이 일어나고

답변

2

:

(^|\\s) 

이 찾고있는 것을 의미한다 줄 시작 또는 공백 뒤에 단어를 검색하십시오. 공백이 없으면이 일치는 실패합니다.

당신은 당신의 검색어는 질문에 같이 단어 경우 단어 경계를 사용하도록 코드를 변경할 수 있습니다

function updateHaystack(input, needle) { 
    return input.replace(new RegExp('\\b' + needle, 'ig'), '<b>$&</b>'); 
} 

PS : 아래 코멘트를 따라 주어진 단어로 시작하는 일치합니다 . 따라서 manmandate과 일치하지만 woman은 일치하지 않습니다.

+0

감사합니다. 그러나 이것은 항상 작동하지 않습니다. 예 : 퇴직의 경우 -> 귀하가 요청한대로 자금을 출연 한 이유는 무엇입니까? 이러한 경우는 문맥에 단어의 다른 형식 (-ed, -ing, -s 등)이 포함되어있는 경우 문제가됩니다. ( – erdomester

+0

질문의 모든 사례를 지정하지 않았지만 '포함 된 해당 사례가 입력을 반환합니다. replace (new RegExp (needle, 'ig'), '$ &');'원하지 않는 문자열과도 일치 할 수 있습니다. 예를 들어'man'이'mandate' 또는'woman'과 일치합니다. – anubhava

+0

단어가 일치하도록 수정할 수 있습니까? 남자가 위임장과 일치한다면 괜찮아요. 여자는 일치 시켜서는 안됩니다. '\\ b'와'ig'는 무엇을하는지 명확히 할 수 있습니까? – erdomester

관련 문제