2012-09-05 54 views
23

我們今天缺乏這個理由,是否有充分的理由?如果是的話,這是否可以解決?或者,它是否會像其中一個會破壞向後兼容性的東西?JS正則表達式是否會看起來向後看?

+1

JS已經支持先行,不是嗎?詢問爲什麼它不支持* lookbehind *當然仍然很有趣。 –

+0

改變我只是爲了看後面。 – haxxerz

+0

雖然我很想知道。 – haxxerz

回答

19

我在2010年發現了一個mailing-list thread關於這個問題。

顯然,當EcmaScript 3正在開發中時,他們看到了Perl 的正則表達式特徵。 Waldemar Horwat寫到爲什麼在該標準中沒有添加後視 :

ES3規範是基於當時穩定的。 Perl有 正在用regexp的其他結構進行試驗,但是有一些在那裏的流失,我不想去找那些仍然在變化的 的功能。

在稍後的帖子中,Marc Harter創建了a proposal用於添加 此功能。

其餘的討論是關於 提案的具體細節;沒有人有任何理由包括它在下一個 標準。

不幸的是,討論沒有解決就結束了。 EcmaScript和諧wiki上有一個 頁面,但它所做的只是鏈接到 提案和郵件列表線程。

所以它似乎沒有明顯的原因反對添加倒序 功能的JavaScript正則表達式。然而,也似乎 沒有更多的活動加入他們要麼 - 我懷疑 開發商和語言的設計者是迄今發生較大的變化 他們正在計劃爲ES 6.

分心,我認爲你最好的選擇現在將再次在 es-discuss郵件列表中提出主題。我不知道 的確切政策,特別是列出的,但我懷疑人們會很好,至少 再次談論它;也許有人甚至會向 尋求支持下一個標準。

+0

哇,很好的回答!謝謝。 他們專注於什麼更大的變化?我意識到會發生巨大的變化,我從未真正理解他們中的任何一個,我已經看到他們提到過。 – haxxerz

+1

我不完全確定 - 現在我在過去的一年左右已經從JavaScript轉向更加綠色的牧場。我記得一些有趣的功能,比如Python風格的生成器,代理,可選的括號,新的lambda語法(涉及'#',我認爲)以及可能還有一些其他的東西。也就是說,我不記得哪些是真正的建議,哪些只是一廂情願的博客文章:P。 [維基](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

我當時並不在身邊,所以我不知道爲什麼lookbehind最初並不存在,但是這裏有一些ES6之後的活動,我爲Fletch寫了一個.Net風格的lookbehind實現,這是Dart的一個實現(與dart2js和DartVM一樣)具有JS兼容的正則表達式。

它被移植到V8作爲一個實驗性功能,並且V8端口被移植到Firefox。它帶有--harmony-regexp-lookbehind標誌在撰寫本文時,沒有用戶界面來激活它

你可以在https://dartpad.dartlang.org/8feea83c01ab767acdf1上玩一個Fletch實現版本,你可以試試。網眼風格在http://www.regexplanet.com/advanced/dotnet/index.html

與perl和python以及大多數其他regexp引擎不同,這是一個不受限制的lookbehind實現:JS regexps中允許的所有功能也可以在lookbehinds中工作,例如*和+。和{},向後看,向後看,向後看。我希望能找到能夠幫助實現標準化的人。如果在一年內ECMAScript仍然沒有向後看的支持,那麼原因可能是沒有人能夠找到這個標準的章節。

+0

你從哪裏獲得Dart實施? – refi64

+0

我在Dartino(以前稱爲Fletch)中編寫了Dart語言的regexp實現,並且我還編寫了向後看的支持。 –

+0

你應該完全上傳正則表達式代碼到GitHub或其他東西。在Dart正則表達式中,在其他人面前支持lookbehind支持將會很棒! – refi64

相關問題