2010-07-13 4 views
3

검색 문자열의 모든 특수 문자를 이스케이프 처리하는 정규식이 있습니다. 위대한 작품이지만, 나는 단어 경계로 작동하도록 할 수 없습니다. 예를 들어, 모래 사장정규식 단어 경계 및 특수 문자

add + 

또는

add (+) 

바늘

+ 

과 정규 표현식 /\+/gi는 "+"일치한다. 그러나 정규 표현식 /\b\+/gi은 그렇지 않습니다. 이 작품을 만드는 방법에 대한 아이디어가 있습니까? 정규식으로

add (plus) 
모래 사장으로

/\bplus/gi를 사용

, 그것을 잘 일치합니다. 이스케이프 처리 된 캐릭터가 왜 문제가 있는지 파악할 수 없습니다.

/\b\s?+/gi 

편집 :

+0

샘플 문자열의 공백을 좀 더 명확하게 만들기 위해 샘플 문자열의 형식을 변경했습니다. 정규 표현식이 실패하는 이유를 이해하는 데 필수적입니다. –

답변

5

\b제로 폭 주장이다 : 그것은 단지 특정 조건이 주어진 위치에 보유 주장, 모든 문자를 소비하지 않습니다. 단어 경계는 그 위치가 단어 문자 앞에오고 뒤에 하나가 나오지 않거나 단어 문자 앞에오고 하나가 오지 않는다고 주장한다. (A "단어 문자"는 영문자, 숫자, 밑줄입니다.) 당신의 문자열에서 다음 a는 단어 문자 앞에되지 않기 때문에

add + 

... 시작 부분에 단어 경계있다, 두 번째 단어 뒤에는 단어 문자가 없기 때문에 d이 하나 있습니다. 정규 표현식 (/\b\+/)의 \b은 공백과 +을 일치 시키려고 시도합니다. 두 단어 중 어느 것도 단어 문자가 아니기 때문에 작동하지 않습니다.

+1

그건 실제로 많은 의미가 있습니다.그때 나는''\ s','\ (','\ ['등)과 같은 일치하는 미리 정의 된 문자의 목록을 만들지 않고 원하는 것을 달성 할 수있는 방법이 없다. +'? – ggutenberg

+1

당신은 단어 문자가 아닌 * 무엇이든 일치 시키길 원합니까? 그것은 \ W (대문자 'w')이거나'\ B'를 사용하여'+'가 선행되어 있지 않다는 것을 주장 할 수 있습니다 –

+1

분명히 단어 문자가 아니지만 실제 사용법에 대한 설명은 올바른 방향으로 걷어 찼습니다. 이제 JS의 첫 번째 문자에 대한 검사를하고 있습니다. 정규식입니다. '\\''\ b'를 추가하지 않으면, 그렇지 않습니다. 내가 원하는 결과를 얻은 것 같습니다. 감사합니다. – ggutenberg

0

가로 변경합니다

은 지금까지 당신이 원하는대로이 개념을 확장합니다. 당신은 어떤 단어 경계 후 ​​첫 +를 원하는 경우 :

/\b[^+]*+/gi 
+0

내가 준 구체적인 예에서 작동하지만 단어 경계를 제대로 설명하지 못합니다. 예를 들어, 'add (+)'를 건초 더미로 사용할 수 없습니다. – ggutenberg

+0

좀 더 일반적인 경우를 설명하기 위해 내 답변을 편집했으나 원하는 내용이 아닌 경우 원하는 내용에 대해 구체적으로 설명해야합니다. – riwalk

+0

구체적인 방법을 모릅니다. 특수 문자가 단어의 시작 부분에 있음을 지정하려면 단어 경계 \ b를 사용해야합니다. 예를 들어 'add (+)'를 포함하도록 질문을 업데이트했지만, 공백이 아닌 다른 문자가 단어 경계를 지정하는 곳이 수십 개 더 많습니다. – ggutenberg

0

경계는 매우 조건부 어설 션입니다. 그들이 닻을 내리는 것은 그들이 만지는 것에 달려 있습니다. 자세한 설명은 this answer을 참조하십시오. 그 밖의 처리 방법은 다음과 같습니다.