2016-07-29 4 views
1

AngularJS 응용 프로그램에서 html5 모드를 구현 중입니다. 서버에서 나는 기본 URL에 접미사 (그래서 확장자가없는 아닌 정적 자원)없이 모든 것을 전달해야이 각 앱 잘 작동,하지만 지금 사람들은 HAL을 사용하려면각도 HTML5 모드 및 HAL 브라우저

@RequestMapping(value = "/{path:[^\\.]*}") 
public String redirect(HttpServletRequest request) { 
    return "forward:/"; 
} 

브라우저와이 컨트롤러는 https://localhost:8080/api과 같은 일부 브라우저 요청을 전달합니다.

정규식을 수정하여 접미사가없는 모든 항목 (현재와 같이)과/api가없는 모든 항목을 일치시킬 수 있습니까?

이 현재 정규 표현식입니다 : 예를 들어

"/{path:[^\\.]*}" 

:

일치하지해야합니다

  • 어떤/API를
  • 아무것도/
  • 아무것도 apianything/filename.extension
  • 아무것도

(목록의 마지막 두 점은 현재 정규식 괜찮 니)/filename.extensionanything

그것은 일치해야합니다 : 위에 나열되지

  • 모든 것을
+0

시도해보십시오. "/{path:^(?!https? //.*/[^/]+)[^.]*}"' –

+0

하지만 https는 무엇입니까? 그것은 확장없이 모든것과 일치해야하고 api없이 모든 것. 예를 들어 목록을 추가하도록 편집합니다. –

+1

좋아요, "/ {경로 :^(? :(? : * [^ /] /)? api) [^.] * $}"' –

답변

1

사용하는 것으로 보입니다

"/{path:(?!.*api)[^.]*}" 

점이없는 문자열과 일치하고 행의 임의의 부분에 api 하위 문자열이 일치하지 않습니다. 여러 줄 입력이있는 경우에는 미리보기 내부에 . 대신 [\s\S]을 사용하십시오. 이 패턴은 또한 빈 문자열을 허락합니다 (마지막으로 *을 + 입력으로 대체 할 수 없으면 +로 대체하십시오).

또한 패턴이 기본적으로 고정되어 있지 않거나 (여기에있는 것으로 생각됩니다) 정규식 테스터에서 테스트하려는 경우 앵커 : "/{path:^(?!.*api)[^.]*$}"을 추가해야합니다. ^ 앵커는 문자열의 시작과 일치하고 $ 앵커는 문자열의 끝과 일치합니다.

+0

작동하는 것 같습니다. 마지막으로 질문 하나, 점이없는 문자열을 일치 시키려면 어떻게해야할까요? 그리고 시작 부분에 api 하위 문자열이 없으면 어떻게 될까요? (시작은 어디에도 없습니다.) –

+0

시작 부분에 패턴을 일치 시키려면 줄에는'^'앵커 나'(? m) ^'또는'(^ | \ n)'이 필요합니다. 그래서 당신은'(^ | \ n) (? api) [^.] * $' –

+0

과 같은 것이 필요합니다. –

관련 문제