2013-12-17 1 views
2

"ad"또는 "ae"로 시작하는 모든 단어 또는 "-ad"및 "-ae"가 포함 된 모든 단어와 일치시키는 JavaScript 정규 표현식을 작성하려고합니다.JavaScript의 정규 표현식 : 문자열의 시작 부분에 여러 하위 문자열이 일치합니까?

이 내가 무엇을 시도했다입니다 그러나

var regex_string = "^[ad|ae]|-[ad|ae]"; 
var re = RegExp(regex_string, "i"); 

var matches = _.filter(data, function(r) { 
    if (re.test(r)) { 
    return true; 
    } 
}); 

,이 'A', 'D'또는 'E'로 시작하는 모든 단어를 일치합니다.

어떻게 정규 표현식을 수정하여 해당 문자열에만 일치시킬 수 있습니까? 여기

JSFiddle : http://jsfiddle.net/xGgan/1/

+0

사용 정규식 리터럴 – SLaks

답변

3

[]가 말한다 "a 또는 d 또는 일치 |하거나 또는 전자를"그래서 내 모든 문자와 일치하기 때문이다. 또는 대신에 캡처 그룹을 사용해야합니다.

var regex_string = "(^(ad|ae)|-(ad|ae))"; 
3

[ ... ]에 관계없이 위치의 일치 안에 문자 클래스 아무것도 의미보십시오. 또한 [ae]은 한 문자 (a 또는 e)와 일치합니다. 직접 번역 무엇을 당신의 수행하기위한

는 줄 것이다 :

(?:^(?:ad|ae)|-(?:ad|ae)) 

당신은 그룹 (비 캡처 그룹에 대한 캡처 그룹에 대한 (...)(?: ...)|를 사용, 당신이 의도하지 않는 경우 후자가 바람직하다 regex 속도와 메모리를 현명하게 향상 시키므로 나중에 사용하기 위해 캡처를 저장합니다. 그 조금을 최적화 할 수 있습니다 그러나

:

(?:^|-)a[ed] 

은 미세 일치해야합니다. 여기

0

"-ae 및 -ad"내 해석 :

/^(?:ad|ae)|-ad.*-ae|-ae.*-ad/ 
관련 문제