2009-11-25 4 views
5

나는 (내가하고 싶은 일을하지 않는)이 정규 표현식을했습니다 : /^.*\/(eu|es)(?:\/)?([^#]*).*/ 사실의 JS 버전입니다 : /^.*/(eu|es)(?:/)?([^#]*).*/자바 스크립트 정규식 일치 처음 발생

음, 내가 원하는 것을하지 않는이 물론 작동합니다. :) 감안할 때이 URL을 :

  • 에 http : // localhost를/ES -> [1] = 말이지, [2] = ''
  • 에 http : // localhost를/유럽/BLA/즐 번호의 이태리 놈 - > [1] = EU, [2] = 'BLA/BLA를'
  • HTTP : // 로컬 호스트/EU/BLA/eubla -> [1] = EU, [2] = 'BLA'

첫 번째 두 URL은 예상대로 작동합니다. 세 번째 것은 내가 원하는 것을하지 않고있다. "eu"는 URL에서 나중에 발견되므로 첫 번째 eu 대신 두 번째 eu와 일치합니다. 그래서 이것을 맞추고 싶습니다 : [1] = 'eu', [2] = 'bla/eubla'

어떻게해야합니까?

감사합니다. :)

답변

9

확인 처음 * ungreedy

Btw는
/^.\*?\/(eu|es)(?:\/)?([^#]\*).\*/ 

, 당신이 정말로 자바 스크립트 *을 탈출해야합니까? 이게 효과가 없을까요?

/^.*?\/(eu|es)(?:\/)?([^#]*).*/ 
+1

별이 왜 이스케이프됩니까? –

+0

그래, 나는 똑같은 것을 궁금해하고 있었다. –

+0

고정. 그것들은 거기에있을 의도가 없었습니다. 나는 편집자 미리보기로 혼란을 겪었습니다. – doup

1

첫 반복 문자는 비 반복 반복입니다. *. 이 시도 :

/^.\*?\/(eu|es)(?:\/)?([^#]\*).\*/ 

유일한 차이점은 첫째 * 후 물음표 ?입니다. 이것이 없으면 *은 가능한 한 많은 문자와 일치하므로 세 번째 예에서 원하지 않는 동작이 발생합니다.

1

위의 답변은 욕심 많고 비 탐욕적이지만 괜찮습니까?

/\/(eu|es) 

다음과 같이 표현식을 시작하면 줄에 처음 나타나는 식과 일치합니다.

+0

사실,이 또한 작동합니다. 어쨌든, ungreedy 것을 아는 것이 좋다. 모두에게 감사드립니다. :) – doup