2013-04-12 5 views
3

내가 생각하기에 sorthand 정규식 형식의 동일한 표현식과 다른 문자열은 RegExp 객체와 같습니다. 나는 그들 모두가 사실 일 것이라고 기대하지만 그것은 내가 보는 것과 다르다.JavaScript Regular Expression/shorthand/vs Regexp (string)

/^key$|^key([;,]\skey)+$/.test('key, key; key') //true 

var rgxStr = '^key$|^key([;,]\skey)+$'; // 
(new RegExp(rgxStr)).test('key, key; key'); //false 

무슨 일입니까? 여기

답변

2

을 - 당신은 백 슬래시에게

var rgxStr = '^key$|^key([;,]\\skey)+$'; 
+0

하를 탈출해야, 그게 다입니다 . 밤늦게까지 코딩의 양날 칼입니다. – QueueHammer

3

봐 : 문자 정규 표현식에서

var rgxStr = '^key$|^key([;,]\skey)+$'; 
//       ^whoa, a backslash! 

는 자바 스크립트 정규 표현식의 일부로서 그 백 슬래시를 해석합니다.
정상적인 문자열 리터럴에서 JavaScript는 \s을 어떻게 처리해야하는지 알지 못하고 백 슬래시를 버립니다. 이 문제를 해결하려면

, 문자열 리터럴에서 백 슬래시 탈출 : 당신이 문자열에서 정규 표현식을 정의하고 자마자

var rgxStr = '^key$|^key([;,]\\skey)+$';