2010-06-03 4 views
2

동료가 정규식 문제에 대해 물었습니다. 그 사람을 찾고 답할 수없는 것 같습니다. 우리는 텍스트 편집기에서 텍스트의 특정 길이를 강조하기 위해 경계를 사용하지만, 여기에 문제를 보여 일부 샘플 코드입니다있어자바 정규식 및 경계

:

<script type="text/javascript"> 
var str = "Alpha , Beta, Gamma Delta Epsilon, AAlphaa, Beta Alpha<br/>"; 
var rx = new RegExp('\bAlpha\b','gim'); 

document.write(str.replace(/\b(Alpha)\b/gim, '-- $1 --')); 
document.write(str.replace(rx, '== $1 ==')); 
</script> 

문제는 첫 번째 문자 str.replace 작동하지만, RegExp 옵션은 그렇지 않습니다.

나는 IE와 FF에서 같은 행동을했는데, 누구도 그 이유를 알고 있습니까?

답변

10

RegExp에 전달한 문자열에서 백 슬래시를 이스케이프 처리해야하기 때문에 작동하지 않는다고 생각합니다. 이 있습니다

var rx = new RegExp('\bAlpha\b','gim'); 

당신이 필요합니다

var rx = new RegExp('\\bAlpha\\b','gim'); 

당신이 \b 문자열에 백 스페이스를 삽입하기위한 이스케이프 시퀀스이기 때문에, 거기에 2 백 개 스페이스 문자가 정규식에 전달 된 문자열입니다. 다른 백 슬래시로 각 백 슬래시를 이스케이프 처리해야합니다. 정규식은 이스케이프 문자를 가질 필요가

+0

물론, 물론; 감사! –

+0

캡처 괄호도 누락되었습니다. \\ b (Alpha) \\ b –

+0

그래,이 대답을보기 전까지는 Doh가있었습니다. thx – CommentLuv

2

탈출 :

new RegExp('\\bAlpha\\b') 
2

이 문자열 문제입니다. 문자열 리터럴의 \b은 백 스페이스입니다!

RegExp('\\bAlpha\\b','gim');

1

자바 스크립트에서 정규 표현식을 작성하는 2 가지 방법이 있습니다

  1. 문자
  2. 문자 그대로의 방법으로

정규식 개체, 당신이로 사용하는 올바른 양식을 것 당신은 당신의 교과서에서 배웠습니다./balabala/ 그러나 RegExp 개체에서 정규 표현식은 문자열로 기록됩니다.

다음 코드를 사용하면 자바 스크립트에서 어떤 문자열이 작동하는지 알 수 있습니다.

alert("O\K"); 
alert("O\\K"); 

Regexp가 텍스트 영역이나 입력란에 쓰여지는 경우가 있습니다. 예를 들어,이 경우

http://www.pagecolumn.com/tool/regtest.htm

는 정규 표현식에서 \ 이스케이프 할 필요는 없다.사실

0

당신이 정규식 생성자에 전달 된 문자열에있는 모든 백 슬래시해야 :

var re = new RegExp("my_\(\[\\\w_\]+-\\\d-\)regexp") 

과 일치하는 다음 바보 예 모두 :

var re = /my_([\w_]+-\d-)regexp/ 

에 해당

"my_very_obvious-4-regexp".match(re) 
["my_very_obvious-4-regexp", "very_obvious-4-"]