正則表達式生成?

最近在看jquery的源碼,首先看的是他的選擇器,看到jquery也用了sizzle的css選擇器引擎,而sizzle大量使用了正則表達式,貼一個感受下:

讀起來真的有障礙,即使把正則表達式的規則細讀了2遍,也沒法完全理解這種正則表達式。更別說寫了,很難想像這種東西是碼出來的。

本人涉世不深,才疏學淺,也google了有正則表達式在線生成器,不過都不好用。想請教一下大家平時都是怎麼寫正則的?如果有好用的工具,可否推薦下,如果真是全手工的,可否指點一下正則表達式的學習方法。


這種正則表達式都是寫完就不管的……


正則表達式就是write only的,就算是你自己寫的,複雜了或者時間久了你自己也是看不懂的,所以不要擔心。

我自己的學習方法是,用C++把C#那個規格的強大的正則表達式整個做了出來,優化到性能幾乎一致,遠超當時流行的所有其他相同功能的正則表達式(當然了compile我沒有做),然後就精通正則表達式和各種奇技淫巧並且在寫的時候還能照顧性能了。

前後一個半月。


怎麼寫正則?

試著做個小總結吧,正則是一門很複雜的知識, 代碼里的正則來源大致有:

1.初學者, 度娘、谷歌搜索然後拷貝複製;

2.入門級, 使用正則有一段時間,根據實際業務查詢教程API全手工碼入。
如本人常用的查詢頁:
cainiao8.com 的頁面
JavaScript RegExp 對象

3.進階級, 寫過的正則有一定數量,漸漸了解到很多正則不止write only而是可復用,於是將正則代碼放入自己代碼庫中。(目前主流都是放自己github)

4.大神級, 未知,仍在探索。。。


Sizzle正則不是很難
私信我


深入淺出之正則表達式(一)
深入淺出之正則表達式(二)

之前是看了這個才正式入門regex的,當時是為了給The world瀏覽器寫廣告過濾,分享給初學者。


正則表達式,相比其他編程語言,有一個最大的特點:你不可能用比一段正則表達式更短的自然語言來描述它。(其實是因為正則表達式是一個一階邏輯)
比如說,你想描述一個合法的靜態網址,你必須寫上一長串:」網址前面可以有或沒有http:\或Https:\頭,後面跟的網站名由數個.分割數段合法字元串得到,後面跟著數段由/分割的合法字元串構成的目錄地址「,這一段描述壓縮不了,而寫成正則表達式肯定比它短。
所以,正則表達式是沒法抄的。抄代碼的前提是可以用一段比代碼本身更短的抽象文字來說明這段代碼是幹什麼的。而正則表達式表述的意思是無法抽象的,寫正則表達式,你必須得先用語言清晰地表述你到底想要幹什麼——然後你就會發現把這段思路投射成正則表達式的過程比寫任何編程語言都簡單,因為這個過程不需要任何整體處理,只需要逐詞轉換就可以了。
另外,你這是什麼編輯器,這字元串的高亮簡直醉了。


Online regex tester and debugger: JavaScript, Python, PHP, and PCRE

題主可以使用一下類似這樣的工具。把正則表達式和想要匹配的字元串放進去,會出現詳細的解釋正則表達式的每一個字元是什麼意思,和匹配的過程。


你需要這個,不謝
Regexper


只關注能不能寫出可以用的正則表達式的話,可以試試 RegexBuddy 啊。

工具用多了,你可能會照貓畫虎;也有可能只依賴工具,到頭來還是什麼都不會。

要達到脫離工具就可以徒手擼正則的話,找本書好好學吧。一遍不夠就多學幾遍。


我一直覺得寫正則表達式比讀正則表達式要簡單啊 哈哈哈哈


開始學正則是因為工作語言是perl,後來給同事培訓正則就研究了不同語言正則的差異,然後也學會了很多高級用法。


正則很美,我覺得熱愛數學的人都會熱愛正則。


雖說正則這東西好寫不好讀, 但你這截圖裡這些例子既不長又不複雜。 如果這東西都讀得費勁說明你還沒入門。 老老實實的練吧, 正則不是啥複雜東西用上你學javascript十分之一的時間就能熟練了。


RegexBuddy RegexMagic


然而的確是手寫


推薦閱讀:

如何從零寫一個正則表達式引擎?
正則表達式如何匹配 3 的倍數?

TAG:前端開發 | JavaScript | jQuery | 正則表達式 |