2009-05-01 4 views
19

이 질문을 쓰기 시작한 이래로 나는 모든 질문에 대한 답변을 찾은 것 같지만 어쨌든 다른 사람들에게 유용 할 수 있으므로 더 명확하게하기 위해 게시 할 것이라고 생각했습니다. 도움이 되길.자바 스크립트가 정규식을 사용하여 분할되지 않음

javascript 함수 split과 함께 lookahead와 함께 정규 표현식을 사용하려고했습니다. 어떤 이유로 짝을 찾았을 때 문자열을 쪼개지 않았습니다. 나는 원래 문제가 내 정규 표현식에서 미리보기를 사용하는 것이라고 생각했다.

가 작동하지 않습니다 :

"aaaaBaaaa".split("(?=B)."); 

작품 : 그것은 문제가 분할 예에서 전달 된 문자열을 해석하지 하였다 나타납니다

"aaaaBaaaa".match("(?=B)."); 

다음은 간단한 예입니다 정규식으로. 따옴표 대신 슬래시를 사용하면 문제를 해결하는 것으로 보입니다.

"aaaaBaaaa".split(/(?=B)./); 

나는 다음과 같은 어리석은 찾고 예를 들어 내 이론을 확인 :

"aaaaaaaa(?=B).aaaaaaa".split("(?=B)."); 

다른 사람이 경기 함수가 분할 기능을하지 않는 동안 정규 표현식을 가정 이상한 생각합니까?

+0

필자는 match, split, replace 등 모든 것에 항상/regex/(따옴표 제외) 구문을 사용했습니다. 나는 네가 어떤 경우에 가질 필요가 없다는 것을 깨닫지 못했다. –

+2

사실 match()는 정규 표현식 (what * else *와 일치 할 수 있습니까?)을 가정하고 split()은 문자열을 가정합니다. 왜냐하면 문자열에서의 분할은 정규 표현식에서의 분할보다 빠르기 때문일 수 있습니다.split()에 실제 정규식을 전달하는 경우에만 더 느린 정규식 분할을 수행합니다. – Tomalak

답변

31

String.split은 첫 번째 매개 변수로 문자열 또는 정규 표현식을 허용합니다. String.match 메서드는 정규 표현식 만 허용합니다.

저는 String.match이 무엇이든지 통과하려고 노력할 것이라고 생각합니다. 따라서 문자열을 전달하면 정규 표현식으로 해석됩니다. String.split 메서드는 정규 표현식 및 문자열을 사용할 수 있으므로이 방법을 사용하지 않아도됩니다. 이 경우 두 번째로 추측하는 것이 어리석은 일입니다.


편집 : (에서 "자바 스크립트 : 확실한 가이드")는

String.match 작업 할 정규 표현식을 필요로한다. 전달 된 인수는 일치시킬 패턴을 지정하는 RegExp 개체 여야합니다. 이 인수가 이 아닌 경우 먼저 RegExp() 생성자에 전달하여 1로 변환합니다.

3

올바르게 기억한다면 (여기서는 매우 잘못 될 수 있습니다.) 스플릿 메소드는 정규식 엔진이 널리 사용되기 전에 자바 스크립트로 구현되었으므로 아마도 이전 버전과의 호환성을위한 것입니다.

+1

나는 이것이 붙잡는다 고 생각한다; String.split은 1.1에서 소개되었고 Regular Expressions는 1.2에서 소개되었습니다. 'split()'에 대한 문서 (http://wp.netscape.com/eng/mozilla/3.0/handbook/javascript/newfunc.htm)와'split()'의 정규식 개선점은 http : http : //web.archive.org/web/20010408055419/developer.netscape.com/docs/manuals/communicator/jsguide/js1_2.htm (직접 링크가 없으며 '정규 표현식'-> '문자열 메소드' – Steen