好吧,正則表達式,我從來沒記過。以前要用的時候都是網上Copy一下的。
這裡還是扯一下吧,以後要是有要用到的正則表達式那麼就收集到這個帖子裡。(盡管我認為不會,因為我根本就不是一個專業的前端,我只是來劃下水的\(^o^)/)
應用范圍:正則表達式主要應用於對字符串中的信息實現查找,替換和提取操作。
可處理正則表達式的方法有6個:
regexp.exec,regexp.test,string.match,string.replace,string.search和string.split
應用原因:在JS中,正則表達式相對於等效的字符串處理來說,有著顯著的性能優勢。
缺點:正如大部分人所看到的,這個東西有的時候光是看起來就很復雜和難懂。起碼你讓我這種菜去維護一個正則表達式我在網上Copy不到,一般都會用非正則表達式的方式去處理,美其名曰:代碼可讀性!
JS中正則表達式必需寫在一行中,空白需要特別注意。
下面上一段代碼:
var myRegExp=/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/; var url="http://hovertree.com:8041/goodparts?q#fragment"; var result=myRegExp.exec(url);
看到上面這段代碼你知道什麼意思嗎,絕大多數人不知道,知道的人也要看半天。這就是為什麼大家都不願意寫這玩意。好了,這章就這樣吧,大家散了吧。
即使如此,我還是自己要寫下去,因為他實現的效果是這樣的:
result的結果是下面這個數組:
["http://hovertree.com:8041/goodparts?q#fragment", "http", "//", "hovertree.com", "8041", "goodparts", "q", "fragment"]
這就是我為什麼繼續寫下去的原因所在。
好吧,讓我們一起學學這蛋疼又犀利的語法吧:
老實說,我照著書看完,又把這些話歸納總結出來,然後我就一直在想一個問題。
到底我是什麼時候覺得正則表達式很難的呢?
是我還超級菜,並且還不愛學的時候。看什麼都覺得難,再加上人也浮躁,不想沉下心來去學,所以形成了一個這樣的印象。如今看來真是簡單至極。
我會告訴你我基本上就從來沒有自己寫過正則表達式嗎,我只會copy。
但是我在剛剛一個小時的學習中,我覺得我可以了,而且我能立馬寫出一段很6的正則表達式,無論多長,只需要把每個捕獲分組換一行寫就行了,然後貼到代碼裡時再合成一行。
突然的感悟:程序員只是需要一個安靜的心和學習的興趣。
我不會告訴你我是邊看書邊寫博客的,好了,接下來我們繼續吧。
無論如何,即時我現在明白了正則表達式不難,但是仍然還是把正則表達式寫得越簡單越好。
那麼下面來寫一個匹配數字的正則表達式吧
var myRegExp=/^-?\d+(?:\.\d*)?(?:e[+\-])?\d+)?$/i; var url="-1.3e-3"; var result=myRegExp.test(url);//result為true
這上面的正則表達式的最後的 i 表示匹配字符串時忽略大小寫。那麼讓我們擴展一下:
創建正則表達式的方式:
var myRegExp=/^-?\d+$/i
var myRegExp=new RegExp("\"(?:\\\\.|[^\\\\\\\"])*\"",'g');
關於構成正則表達式的元素
[!-\/:-@\[-'{-~]
非常難看,且難懂,所以我的正則表達式啊,唉~~~
var doubledWord=/([A-Za-z\u00C0-\u1FFF\u2800-\uFFFD]+)\s+\1/gi;