2011-02-23 3 views
72

두 개의 정규식 패턴을 하나로 만드는 방법은 무엇입니까?Javascript 변수에서 Regexp 동적 생성?

예를 들어 하나의 긴 패턴과 하나의 작은 패턴이 있는데, 나는 긴 패턴 앞에 작은 패턴을 넣어야합니다.

var pattern1 = ':\(|:=\(|:-\('; 
var pattern2 = ':\(|:=\(|:-\(|:\(|:=\(|:-\(' 
str.match('/'+pattern1+'|'+pattern2+'/gi'); 

이것은 작동하지 않습니다. 문자열을 연결하면 모든 슬래시가 사라집니다.

답변

130

당신은 RegExp를 사용해야합니다 : 나는 문자열을 연결있을 때

str.match(new RegExp(pattern1+'|'+pattern2, 'gi')); 

, 모든 슬래시가 사라 졌어요.

당신은 특수 정규식 문자를 탈출하여 패턴의 백 슬래시가있는 경우, (\(을 같은), 당신은 (\는 이스케이프 문자가 문자열에 있기 때문에) 문자열에 백 슬래시를 사용해야합니다 : new RegExp('\\(')/\(/과 같을 것입니다.

var pattern1 = ':\\(|:=\\(|:-\\('; 
var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\('; 
12

는 아래의 사용 :

var regEx = new RegExp(pattern1+'|'+pattern2, 'gi'); 

str.match(regEx); 
+5

해야 하는가가 아니라'/''새로운 정규식 (...)를'사용할 때 제거? –

+0

@BartKiers 큰 포인트! 일반적인 실수! x) 어딘가 큰 주목할만한 가치가 있습니다 :) –

6

을 당신은 한 문자 정규식을 포기하고 당신이로 정규식을 통과 할 수있는 객체의 생성자를 사용하는

그래서 당신의 패턴이 될해야 끈.

var regex = new RegExp(pattern1+'|'+pattern2, 'gi'); 
str.match(regex); 
1

RegExp 생성자는 텍스트와 패턴을 일치시키기위한 정규 표현식 개체를 만듭니다. 코드 위

var pattern1 = ':\\(|:=\\(|:-\\('; 
    var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\('; 
    var regex = new RegExp(pattern1 + '|' + pattern2, 'gi'); 
    str.match(regex); 

은 ... 나를 위해 완벽하게 작동