2012-09-05 3 views
23

우리가 오늘 그것을 왜 부족하게 만들 수있는 좋은 이유가 있습니까? 그렇다면 그것을 해결할 수 있습니까? 또는 도입 된 경우 이전 버전과의 호환성을 깨뜨리는 것이 그러한 것입니까?JS-regex는 어떤 모습일까요?

+1

JS 이미 내다을 지원, 그렇지 않니? * lookbehind *를 지원하지 않는 이유를 묻는 것은 물론 흥미 롭습니다. –

+0

변경된 내용은 단지 lookbehind에 관한 것입니다. – haxxerz

+0

정말 알고 싶습니다. – haxxerz

답변

19

나는이 문제에 관해 2010 년에 mailing-list thread을 발견했습니다.

분명히 EcmaScript 3을 개발할 때 Perl 에서 정규 표현식 기능을 찾습니다. 발데 마르 Horwat는 모습 숨김 가 해당 표준에 추가되지 않은 이유에 대해 쓴 :

ES3 사양은 시간에 안정 무엇을 기반으로했다. Perl은 을 regexp의 다른 구문을 사용하여 실험했지만 거기에는 어떤 것이 있었는지 이었으며 아직까지는 의 기능을 원하지 않았습니다.

나중에 스레드에서 Marc Harter가 을 추가하기 위해 a proposal을 생성했습니다.

나머지 논의는 제안의 특정 세부 사항에 관한 것이 었습니다. 아무도 에 대한에 대한 이유가 없으므로 다음 표준에 포함됩니다.

불행히도, 토론은 해결되지 않고 끝났습니다. EcmaScript 하모니 위키에 페이지가 있지만, 모두 제안 및 메일 링리스트 스레드에 대한 링크입니다.

그래서 눈부신 이유가 없습니다에 대한 에 대한 lookbehind JavaScript regexps 기능을 추가합니다. 내가 당신의 최선의 선택을 생각 개발자 및 언어 디자이너는 그들이 ES 6.

를 계획까지 큰 변화 산만 것으로 의심되는 - 그러나, 또한 하나 더 이상 활동 대한 그들을 추가 없을 것 같다 이제 es-discuss 메일 링리스트에 주제를 다시 가져 오는 것입니다. 나는 특별히 그 목록 인 의 정확한 정책을 모른다. 그러나 나는 사람들이 적어도 괜찮을 것이라고 생각한다. 다시 말하면 ; 아마도 누군가가 을 향해 다음 표준으로 lookbehind 지원을 할 것입니다.

+0

와아, 대단한 답변입니다! 감사. 특히 더 큰 변화가 무엇입니까? 커다란 변화가 일어나고 있음을 알았습니다. 나는 그들이 언급 한 것을 보았던 곳을 전혀 이해하지 못했습니다. – haxxerz

+1

저는 완전히 확신하지 못합니다. 저는 지난 1 년 동안 자바 스크립트에서 더 푸르른 목초지로 옮겨 왔습니다. Python 스타일의 생성자, 프록시, 선택적 괄호, 새로운 람다 구문 ('#'과 관련된 것)과 아마도 다른 것들과 같은 흥미로운 기능을 생각해 냈습니다. 즉, 어떤 것이 실제 제안 이었는지, 그리고 단지 희망 블로그 게시물 인 것을 기억하지 못합니다. P. [wiki] (http://wiki.ecmascript.org/doku.php)는 표준화 사람들이 고려하고있는 아이디어를 볼 수있는 철저하고 접근하기 쉬운 리소스입니다. –

+1

['es-discuss' 메일 링리스트] (https://mail.mozilla.org/pipermail/es-discuss/)에 대한 검색이없는 것 같습니다. 그래서 저는 누군가 Tikhon이 제안한 것처럼 그들에게 다시 그 주제를 언급했는지 궁금합니다. @haxxerz : 혹시 거기에 뭔가 게시 했습니까? –

0

ES6 Spec은 이제 완료되었습니다 (2015 년 6 월). 불행히도 만들지 않은 것처럼 보입니다. :(

+0

그것은 진짜 수치입니다! – zumek

2

그 당시에는 내가 주변에 없었기 때문에 원래는 보이지 않는 이유를 모르지만 여기에는 ES6 이후의 활동이있었습니다 .Fletch에 대한 닷넷 스타일 살펴보기의 구현을 작성했습니다. (dart2js 및 DartVM과 같은) DartVM의 구현 인 JS-compatible regexps가 있습니다.

실험적 기능으로 V8에 이식되었으며 V8 포트가 Firefox로 이식되었습니다. --harmony-regexp-lookbehind 플래그가 붙어 있습니다. 작성 시점에는 활성화 할 UI가 없습니다.

Fletch 구현의 버전은 https://dartpad.dartlang.org/8feea83c01ab767acdf1에서 재생할 수 있습니다. 시도해 볼 수 있습니다.닷넷 스타일 lookbehind http://www.regexplanet.com/advanced/dotnet/index.html

perl과 python 및 대부분의 다른 regexp 엔진과 달리, 이것은 lookbehind의 제한없는 구현입니다. JS regexps에서 허용되는 모든 기능은 lookbehinds에서도 작동합니다 (예 : * 및 +?)? 그리고 {}, lookbehinds-inside-lookbehinds와 look-aheads-inside-lookbehinds가 있습니다. 표준화를 위해 누군가를 찾을 수 있기를 바랍니다. 1 년 후에도 ECMAScript가 lookbehind를 지원하지 않는다면 그 이유는 표준에 장을 쓰는 사람이 아무도 없다는 것입니다.

+0

다트 구현은 어디에서 받았습니까? – refi64

+0

Dartino (이전에는 Fletch라고 함)에서 Dart-language regexp 구현을 작성했으며 lookbehind 지원도 작성했습니다. –

+0

정규식 코드 만 GitHub 또는 완전히 업로드해야합니다. Dart regexes에서 다른 사람들보다 앞서서 lookbehind 지원을하는 것이 놀랍습니다! – refi64