2015-01-13 3 views
1

이것은 실제 도움이 필요한 것보다 더 많은 호기심을 충족시켜 주지만 더 많은 도움을 주셔서 감사합니다.자바 스크립트 정규 표현식에서 정확한 문자열 부정화

Javascript 정규식을 사용하여 정확한 문자열을 무효화하려는 경우, 아이디어는 "www"문자열을 포함하는 URL을 제외하는 것입니다. 예를 들어이 목록 :

/^http(|s):..[^w]/g 

이 제대로 작동하지만 긍정적 인 경기를 할 수있는 동안 같은 것을 수행 할 수 없습니다 :

을 그 내가 성공적으로 다음과 같은 정규 표현식을 사용할 수 있습니다에 대한

http://www.example.org/ 
http://status.example.org/index.php?datacenter=1 
https://status.example.org/index.php?datacenter=2 
https://www.example.org/Insights 
http://www.example.org/Careers/Job_Opportunities 
http://www.example.org/Insights/Press-Releases 

/[^www]/g or /[^http]/g 

정확한 문자열 www 또는 http가 포함 된 행을 제외합니다. 나는 그런 악명 높은 "부정적인 Lookeahead"시도 :

/*(?: (?!www).*)/g 

을하지만이 중 하나가 작동하지 않습니다 또는 내가 온라인 테스트 할 수 없습니다,이 중 하나를 메모장에서 작품 ++하지 않습니다.

나는 단순히했을 펄, 그렙, awk는 또는 Textwrangler을 사용한 경우 :

!www OR !http 

을 그리고이 일을 할 것입니다.

제 질문은 분명히 : Javascript에서 그런 일을하는 올바른 방법은 무엇이겠습니까? 이 정규식 파서에 따라 달라집니다 (내가 이해하는 것?). 어떤 답변을

덕분에)

답변

3

당신은 시작에 부정적 예측을 추가해야합니다.

^(?!.*\bwww\.)https?:\/\/.* 

DEMO

(?!.*\bwww\.) 부정적 예측 문자열은 우리가 www., 포함되지 않습니다 일치려고하고 있다는 것을 주장한다. \b은 단어 문자와 단어가 아닌 문자 사이에 일치하는 단어 경계를 의미합니다. \b없이, 당신의 정규식에서 www.는 입력 문자열의 모든 위치에 'www'를 부정하기 위해 foowww.

+0

Whoaaa, ​​정말 고마워! 이제 왜 작동하는지 파악해야합니다. 내 말은, "읽을 수있다"는 말은 부정적 예측과 단어 경계가 있음을 알았습니다 ... W3C 학교의 참고 문헌은 매우 제한적입니다. https : // developer가 있습니다. mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp 멋지다, THX, 나 같은 타스 녀석에게는이 유형의 정규식 논리에 익숙해 지려면 시간이 걸립니다. – runlevel0

+1

@ runlevel0 당신이 이해하지 못했던 부분. 내가 설명해 줄 것을 부탁해. –

+0

안녕 Avinash : 천천히 그리고 단계적으로 그것을 읽는 그것을 이해했다.제가 말하고자하는 것은 Perl이나 Bash 정규 표현을 생각하고 말하기 위해 사용하는 것과 같은 방식으로 "말하고"생각하는 법을 배워야한다는 것입니다. 새로운 언어를 배우는 것과 같습니다;) 관심을 가져 주셔서 감사합니다. – runlevel0

0

www.을 일치합니다 :

var a = [ 
    'http://www.example.org/', 
    'http://status.example.org/index.php?datacenter=1', 
    'https://status.example.org/index.php?datacenter=2', 
    'https://www.example.org/Insights', 
    'http://www.example.org/Careers/Job_Opportunities', 
    'http://www.example.org/Insights/Press-Releases' 
]; 
a.filter(function(x){ return /^((?!www).)*$/.test(x); }); 

을 그래서 'WWW'와 일치하지 않는 모든 위치 확인에, 과 일치하는 문자 (.)를 찾습니다.

관련 문제