2012-06-21 4 views
2

왜이 값이 true 대신 false를 반환하는지.일반 매개 변수를 함수 매개 변수로 전달하는 방법

function doit(expression) { 

    var regex = new RegExp(expression, 'g'); 

    alert(regex.test('[email protected]')); 
} 

doit("/^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/"); 
​ 

http://jsfiddle.net/hAV8Q/

+0

'new RegExp'는 슬래시로 예약 된 문자열을 기대하지 않기 때문에 작동하지 않습니다. 첫 번째 문자와 마지막 문자는 리터럴 정규 표현식 패턴의 일부입니다. – apsillers

답변

11

하나 제대로 표현 형식 : 직접 표현

function doit(expression) { 
    var regex = new RegExp(expression, 'g'); 
    alert(regex.test('[email protected]')); 
} 

doit("^\\w+([-+.\\']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*"); 
// no/here, escape \ 

또는 통과 :

function doit(expression) { 
    alert(expression.test('[email protected]')); 
} 

doit(/^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/g); 


슬래시 (/)는 표현식의 일부가 아니며 정규 표현식 리터럴을 나타냅니다. 표현식을 포함하는 문자열을 사용하는 경우에는 백 슬래시가 이스케이프 문자이기 때문에 이스케이프 문자를 생략하고 모든 백 슬래시를 이스케이프 처리해야합니다.

+2

백 슬래시는 문자열에서 이스케이프 문자이므로 '\ w'대신 '\\ w'와 같이 모든 백 슬래시를 이스케이프 처리해야합니다. 이 대답의 두 번째 옵션처럼 문자열 대신 실제 RegExp 객체를 제공 한 경우 코드를 훨씬 더 깨끗하게 처리 할 수 ​​있습니다. – apsillers

+0

@RegisteredUser : 문자열에 백 슬래시가 있으면 이스케이프 처리해야합니다. http://jsfiddle.net/Guffa/hAV8Q/4/ – Guffa

+0

오른쪽으로 백 슬래시를 이스케이프 처리하는 것을 잊어 버렸습니다 ... 그 이유는 정규식을 사용하지 않는 이유입니다. 문자열;) –

2

new RegExp()으로 정규식을 만들 때 구분 기호를 사용하지 않기 때문에. 문자열 앞뒤에서 /을 제거하십시오.

또는 앞뒤에 따옴표를 제거하여 정규식을 전달하고 new RegExp() 호출을 생략하십시오.

관련 문제