단어 경계는 \w와 \W의 그 사이를 찾는 작업
정규표현식(regular expression)을 사용해 일치(match)하는 단어나 기호를 찾는 것은 매우 간단합니다.
My name is ABC.
ABC는 정규표현식 /ABC/를 사용하면 간단하게 찾을 수 있습니다.
그러나 다음 문자열에서 to를 찾기 위해 /to/를 사용하면 의도한 결과를 벗어납니다.
She told me not to go.
to가 포함된 모든 단어를 검색하는데요.
이 때 /b를 사용해 경계를 지정하면 원하는 부분만 찾을 수 있습니다.
그렇다면 /b의 정확한 기능은 무엇일까요?
1. /b의 기능
/b는 문자(\w에 해당하는 문자, a-z,A-Z,0-9,_)와 비(非)문자(\W에 해당하는 경우) 부분의 경계를 의미합니다.
이 부분의 이해가 어려울 수도 있는데요.
예를 들어 보겠습니다.
문자(\w로 표현): abcdefzhijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_
비문자(W로 표현) : 위 문자를 제외한 모든 기호
위와 같은 정의를 갖는 문자와 비문자 사이의 경계를 나타냅니다.
참고로 문자의 \w는 w가 소문자, 비문자의 \W는 대문자입니다.
띄워쓰기는 비문자에 해당하므로 /b를 사용해 단어의 경계를 정하고 원하는 결과를 만들 수 있는 것입니다.
그럼 다음 상황을 확인해보죠.
/\ba/g
위 표현식을 사용했을 때 다음 문자열에서 찾을 수 있는 결과는 무엇일까요?
-a
‘ a’
_a
aa
star
결과는 다음과 같으며 한 줄로 표현하겠습니다.
–a ‘ a‘ _a aa star
-a에서 a가 선택되는 이유는 -가 비문자이며 a가 문자이므로 \b는 두 사이를 가리키기 때문입니다.
‘ a’에서도 a 앞의 띄워쓰기는 비문자, a는 문자이므로 \b는 두 사이를 가리킵니다.
_a에서 a가 선택되지 않는 이유는 _ 기호는 문자로 취급하며 a도 문자이기 때문입니다.(\w의 정의)
aa에서 a가 선택된 이유는 문자열 제일 앞 또는 제일 뒤가 문자면 \b의 조건에 해당한다고 정의하기 때문입니다.
따라서 위의 문장에서 to만 찾으려면 다음과 같은 표현식을 사용하면 됩니다.
/\bto\b/g
She told me not to go.
참고로 \b, \B는 경계만을 가리킬 뿐 실제 문자와 일치하는 것은 아니므로 결과에는 포함되지 않습니다.
2. /B의 기능
그렇다면 대문자로 표현되는 \b의 반대 기능 \B의 정의는 무엇일까요?
바로 비문자와 비문자 사이의 경계, 또는 문자와 문자 사이의 경계를 의미합니다.
!-! abc와 같은 비문자 사이에서 비문자(-)를 찾거나 문자 사이에서 문자(b)를 찾을 수 있습니다.
/\B-\B/g
!–! ‘ – ‘
3. 활용
\b, \B는 주로 단어 검색에 유용합니다.
이 기능의 명칭이 단어 경계(word boundary)이므로 용도는 명확합니다.
문자열 내 의도하지 않은 기호의 탐색이나 카멜케이스(CamelCase)등과 관련된 작업에도 사용할 수 있습니다.