2014-12-02 3 views
1

내가 this 정규식 시작 :왜이 RegEx는 일치시키기 위해 괄호로 묶어야합니까?

/<!--#\s*include\s+file=(['"])([^\r\n]+?)\1\s*-->/g 

그리고 나는 그것이이 라인 모두 일치하고 싶었 :

/<!--#\s*include\s+(file|virtual)=(['"])([^\r\n]+?)\1\s*-->/g 
: 내 첫 번째 시도에서

<!--#include file="../header.html"--> 
<!--#include virtual="../header.html"--> 

를, 그래서 같이 (file|virtual)file 변경

하지만 일치하지 않습니다. 조금 장난 후, 나는 모든 주위에 괄호를 추가하는 것은 일치 얻을 것을 발견

/(<!--#\s*include\s+(file|virtual)=(['"])([^\r\n]+?)\1\s*-->)/g 

왜하지만 이해가 안 - 왜가 제 1 변형 일치하지 않았다, 그리고 여분의 괄호을 왜 수정 ?

답변

1

나는 그것을 알아 냈다. 끝 부분 근처에 \1이 있었고, 그 말은 끝 부분에 같은 따옴표가있는 (['"])과 일치해야했다. 그러나 추가 캡처 그룹을 추가하면 파일 경로 끝에 두 번째 (file|virtual)이 필요합니다.

해결 방법은 \2으로 변경되었습니다.

이 수정 된 정규식입니다 :

/<!--#\s*include\s+(file|virtual)=(['"])([^\r\n]+?)\2\s*-->/g 
관련 문제