2013-08-27 2 views
4

(appendCsrfToken).+(\.do\?\w)
일치하지 다른 부분에 매칭을 찾기 위해 내가하고 싶은 무엇
document.forms[0].action = appendCsrfToken("search.do?lname=Smith");정규식 ... 한 문자열의 일부와 같은 문자열에

.do? 부분이 문자열을 찾을 수 있지만 appendCsrfToken 부분이 없습니다. 예를 들어 ...
document.forms[0].action = "search.do?lname=Smith";

나는 다음은 부정이 작동 할 것입니다하지만 난 제대로 경기를 얻기 위해 appendCsrfToken를 부정 어떻게 그것을
(^appendCsrfToken).+(\.do\?\w)

을 테스트 할 때 내가 어떤 경기를 받고없는거야 생각 내가 찾고 있어요?

답변

4

부정을 위해 ^을 사용하면 문자 클래스에서만 작동합니다. lookahead이 필요합니다. 가장 쉬운 방법은 문자열 시작 부분 (^)부터 appendCsrfToken까지 이 음수 인 미리보기를 사용하는 것입니다. 그 작동하는 경우, 계속 진행하여 do? 일치 :

^(?!.*appendCsrfToken).*(\.do\?\w) 

Demo.

+0

네, 실제로 트릭을합니다. 제가 이해하지 못하는 부분은'^ (?!'부분입니다. 링크 된 기사에서 이것을 설명합니다 (아직 읽지 않았습니다) ? –

+1

@ZackMacomber 네, 그렇기 때문에 링크 된 ^^.^및'(?! ...)'는 관련이 없습니다.^(문자 클래스 외부)는 '(?! ...)'는 부정적 선입관으로 서브 패턴이 일치하면 실패하지만 * 실제로 서브 패턴과 일치하는 것은 소비하지 않습니다. 따라서 * 앞을 내다 본다. 그러나이 기사는 내가 할 수있는 것보다 훨씬 잘 설명한다. –

0

당신은 또한 부정적인 lookbehind을 사용할 수 있습니다. 여기에 해결책이있다

^(?<!.*appendCsrfToken).*(\\.do\\?\\w) 
관련 문제