2016-06-16 2 views
4

, 우리가 어떤 경로로 일부 엔드 포인트를 정의 할 수 있습니다 :급행 노선의`/ : foo *`와`/ : foo (. *)`의 차이점은 무엇입니까? Express에서

app.get('/:foo*', function(req, res) { ... }); 

app.get('/:foo(.*)', function(req, res) { ... }); 

두 경로가 매우 유사하고, 그들 사이의 차이점은 무엇입니까?

+0

는 낮은 수준의 설명은 그들이 말을하는 것입니다 문자열을 감안할 때 문자열

의 끝에 도달 할 때까지 일치 계속 의미하는 와일드 카드입니다 '/^(? : \/([]) :? (? : \/[^ \\ /] +?) *))? (? : \)/(? = $))? $/i' 그리고 두 번째는'/^\/(.*)(?:\/(?=$))?$/ i' –

+0

[캡쳐 그룹]처럼 보입니다 (http://www.regular-expressions.info/brackets.html). – Bergi

답변

1

*는 앞의 모든 문자를 0 개 이상 일치합니다 캡처 그룹 문자열 /:foo/apple/banana/:foo/:1234

/:foo* matches: /:foo/apple/banana/:foo/:1234 
       ^^^^^    ^^^^^ 

(.*) 감안할 때 위의 토큰의 0 개 이상의

일치합니다. 문제의 문자는 우리가 /:foo를 볼 때 우리는 우리가 /hello/world/:foo/bar?id=123

/:foo(.*) matches /hello/world/:foo/bar?id=123 
           ^^^^^^^^^^^^^^^^ 
관련 문제