2013-12-24 2 views
2

/\ w \ b \ w /에 대해 혼란스러워합니다. 나는 때문에, 그것은 "우리"의 "으으"와 일치해야한다고 생각 :정규식 -/ w b w/

w \

는 "E"B \

는 단어 문자는 (공간)

""입니다 단어 broundary입니다 \ w는 "w"가 붙은 또 다른 단어입니다.

따라서 "we we"에서 "ew"가 일치합니다. 하지만 ...

/\ \ B \ w w/단어 문자가 아닌 단어와 단어 문자 모두 다음에 결코 수 있기 때문에, 아무것도 일치하지 않습니다. 내가 그들의 설명을 이해할 수

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions?redirectlocale=en-US&redirectslug=JavaScript%2FGuide%2FRegular_Expressions

:

나는 MDN에서이 하나있어. 아기 단계에서 설명해 주시겠습니까? 고맙습니다!

+0

두 가지 이유는 무엇입니까? 나는 \ w가 먼저 \ b, 그 다음에 \ w가되어야한다고 생각한다. –

답변

2

키는 \b 의미입니다. \b은 단어 경계와 일치합니다. 단어 경계는 단어 문자가 따르지 않거나 다른 단어 문자 앞에 오는 위치와 일치합니다. 일치하는 단어 경계는 일치 항목에 포함되지 않습니다. 즉, 일치하는 단어 경계의 길이는 0입니다.

그래서 \b 자체는 일치하지 않습니다. ^, $ 등의 조건 일뿐입니다. /^\w/ 단어 시작 문자와 마찬가지로, /\w\b/은 단어 문자 뒤에 단어 문자가 오지 않습니다.

"e w"에서 /\w\b/은 여기에서 단어 문자 다음에 한 마디 문자가 공간 "e" 있지만 "e " 일치합니다.

/\w\W/은 에서 "e w"으로 일치합니다. \b 조건이 일치하지 않습니다.

/\w\b\w/은 단어가 아닌 단어와 단어가 모두 뒤 따르는 단어입니다. 모순되므로 일치하지 않습니다.

5

공간 문자는 단어 경계하지 않습니다. 단어 경계는 문자 자체가 아니며, 단어 문자가 비 단어 문자로 변환되는 "문자 사이"의 장소입니다.

따라서 "e w".match(/\w\b/)은 이 아니라 "e"과 일치합니다.

/\w\b\w/은 단어 문자가 단어가 아닌 문자와 단어 문자 바로 뒤에 오도록 요구하기 때문에 결코 일치하지 않습니다. 물론 불가능합니다.

+1

참고로, '\ b'는 "제로 너비 어설 션"의 예입니다. 표현의 그 시점에서 특정 조건이 참이어야하지만 어떤 문자도 먹지 않습니다. lookaheads, lookbehinds,'^','$'도 같은 방식으로 작동합니다 (JS는 lookbehind를 가질 수 없지만, 이제는 그것에 대해 생각합니다). – cHao

+0

그렇지 않습니다. :) 나는'^'과'$'에 대해서 언급하려고 생각했지만, 문자열의 끝 부분에 있기 때문에 어떻게 든 혼란 스러울 수도 있다고 생각했습니다. 루아의 프런티어 패턴은 제가 생각할 수있는 유일한 예입니다 만 여기서는 실제로 관련이 없습니다. –

+0

이 철저한 설명에 감사드립니다. –

1

\w\b\w 수단 매치 :

  1. 영숫자 (\w); 영숫자 문자에서 영숫자 문자로의 전환 (또는 그 반대) ('\ b')으로 이어지는
  2. 이 뒤 따른다. 그러나 실제 캐릭터는 아닙니다. 영숫자 (\w) 다음에
  3. 이 뒤 따른다.

중요한 점은 \b은 문자를 소비하지 않기 때문에 테스트 된 위치에 인접한 문자를 확인합니다. 따라서 \w\b\w은 두 문자와 일치하며 영숫자 (\w)이어야하며 그 사이의 가상 점은 한쪽에는 영숫자가 있어야하고 다른쪽에는 영숫자가 아니어야합니다. 따라서 일치시킬 수 없습니다.

희망이 도움이됩니다. 이 시작되거나로 끝나는 경우

1

정규 표현식은 문자열의 시작이나 끝 부분에 대부분의 방언에서 단어 경계가 \w와 비 단어 문자 (\W) 사이의 위치이기 때문에 입력 "we we" 실패, 또는 ​​것 단어 문자.귀하의 정규 표현식이를하고있다

:

\w   word characters (a-z, A-Z, 0-9, _) 
\b   the boundary between a word char (\w) and not a word char 
\w   word characters (a-z, A-Z, 0-9, _) 

따라서, 귀하의 단어 경계의 위치를 ​​다음 단어의 문자에 대한 말을보세요. 종료 \w을 제거하면 입력 한 내용의 e과 일치합니다.

console.log("we we".match(/\w\b/)); 
// => [ 'e', index: 1, input: 'we we' ] 
관련 문제