MEAN 架構下的 FCC | FCC 西安線下編程活動體驗 #05

相距 FCC 西安第一次線下編程活動,從 2016 年 09 月 16 日到 2017 年 03 月 12 日,半年的時間,在這個社區,發生了很多很多難忘的故事。身為小小組織者的我,也將很多成長中的“第一次”揮灑到了這里。FCC 西安,伴隨每一位開發者茁壯成長。

不是我們跟奇數過不去,反而恰巧,在第一、三、五次,活動辦得最有意思也最具干貨。就不細細講來其中的緣由。

這次,FCC 西安進高校,西安郵電大學一個新開的,很棒的大學生創業咖啡館里,分享編程人♀生。

freeCodeCamp西安第一次線下編程活動體驗
freeCodeCamp西安第三次線下編程活動體驗

Coffee N Code

1

Icebreaker Games。次次活動都輪流介紹一下自己是不是不清真?能創新,就有不一樣的體驗。這次分為三個小組,每個人代表自己小組來說出自己的三個愛好或特長,其中一個是假的,其余小組搶答說愛好的人的哪個愛好是假的,答對加一分,答錯扣一分。分數最低的小組呢,再來介紹一下自己的家鄉和美食饞饞大家。命運,掌握在自己的手上。

每個人的愛好都各有所長,假的那個愛好反而更有趣和調皮。就說說我說的三個真假愛好吧,看看你能猜出來嗎?

  • 喜歡讀書、編程、游戲和寫作。
  • 苦瓜真好吃。
  • 熟悉前端和后臺。

答案,最后揭曉。

2

不知道各位 FCC 學員曾經、現在所在的大學與開源社區的合作活躍度怎么樣。只要有一雙善于發現的眼睛,我相信在工科學校內,都會找到一倆個和開源社區有合作的大學生團體吧?

我們的西郵(選址原因罷,這次參加活動的大部分是西郵學生),就與下圖的開源社區有過長期合作,其中,FCC 中文社區,便是我帶進來的。祈愿長傳。

西郵和開源社區

3

FCC 的介紹每一位 FCC 學員在自己的城市線下活動中相信聽過很多次了。這次,切入一個主題,淺談 FCC 的 MEAN 架構。自己學歷尚淺,參考資料外加個人感悟而訴。

MEAN = MongoDB + Express + Angular + Node.js

從上述單詞縮寫的示意可以看到, MEAN 架構作為全 Javascript 的 Web 開發架構,能夠端到端地開發現代的、全堆棧的二十一世紀 Web 項目,有如下特點:

  • (M)ongoDB——采用 NoSQL 的文檔數據庫,使用 JSON 風格來存儲數據,甚至也是使用 JS 來進行 sql 查詢;
  • (E)xpress——基于Node的Web開發框架,提供對服務端路由的訪問;
  • (A)agular——JS的前端開發框架,提供了聲明式的雙向數據綁定;
  • (N)ode——基于V8的運行時環境(JS語言開發),可以構建快速響應、可擴展的網絡應用。

再對比 LAMP 技術堆棧,詳細內容可以獨立成章,這里便不細細而談。

4

干貨,絕對的干貨。JavaScript 之正則表達式入門。以下內容參考自慕課網的 JS 正則表達式。

^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$

以前,總覺得正則表達式太高端,像匯編語言一樣羞澀難懂。看到上面的這串正則,我知道肯定有規則可尋,但只能看懂個 a-z 什么的。好了,不雞湯了,上更多的干貨。

身為開發者,我們一直在默默使用著正則。git add .這種最讓我們偷懶的 git 命令一直在使用著。如果你還沒用過,FCC 可以帶給你這些知識點。

JavaScript 中通過內置對象 RegExg 支持正則表達式。字符串對象 String 也有相應的正則方法。

先用常見的 string.split(',') 為例,在 FCC 上做過題的學員肯定十分熟悉這條語句,其實,string.split(',') 中的 , 會被轉做正則,效果等價于 string.split(/,/g); ,意為在全局尋找 , 并將逗號前后的字符串分別順序放入數組中。

回到 RegExg 對象中,有兩種方法實例化 RegExp 對象:字面量和構造函數。

在下圖示例中,第二條語句 var reg = /\bis\b/g 用字面量的方式聲明了一條正則表達式規則,該規則將在全局(g, global)中匹配所有單獨存在的 is 單詞。第三條語句進行匹配。看看第四條語句,var reg = new RegExp('\bb\is\\b', 'g') ,實例化一個 RegExp 對象并傳入相關參數觸發構造函數,第一個參數便是正則表達式,第二個代表該規則將在全局(g, global)中匹配。

可以看到,字面量中,用 // 包裹正則表達式語句,RegExp 對象里,由于是 JS 語句,反斜線 ```本身并不代表反斜線而是轉義的意思,應該將反斜線用自身轉義,\才代表一個反斜線,\t``` 代表一個制表符,俗稱縮進。如下轉義常見的字符不止能在 JavaScript 中見到。

轉義字符 含義
\t 水平制表符
\v 垂直制表符
\n 換行符
\r 回車符
\0 空字符
\f 換頁符
\cX 與 X 對應的控制字符(Ctrl + X)

元字符

正則表達式由兩種基本字符類型組成:原意文本字符和元字符。原意文本字符很好理解,在正則表達式中,a 就是要找到 a 字母,但若是看到 [a-z] 那肯定不是匹配 [a-z] 這五個連續的字符了,意思是把 a 字母到 z 字母中所有字母組成一類,只要能匹配到這一類的任意一個就滿足匹配規則。[] 便是元字符。

在正則表達式中有特殊含義的非字母字符有,+?$^.|\(){}[]。如果就想用這些元字符本身的意思,$ 就是代表美元符,轉義即可:\$

字符類

剛剛提到,“在正則表達式中出現的 [a-z] 是把 a 字母到 z 字母中所有字母組成一類,只要能匹配到這一類的任意一個就滿足匹配規則。”,就用到了字符類。一般情況下,正則表達式的一個字符對應字符串的一個字符,而用 [] 來構建一個簡單的類。^ 來創建一個反向類。

怎么理解呢?以下兩行代碼中,第一行將字符串中所有 abc 的字符替換成 X 字符。而第二行則代表將字符串中所有不是 abc 的字符替換成 X,后者便是反向類。

'a1b2c3d4'.replace(/[abc]/g, 'X');
'a1b2c3d4'.replace(/[^abc]/g, 'X');

預定義類

到了這里,[0-9] 便能輕松看懂了。但想要寫一個匹配 11 位電話號碼的規則,難道連寫十一次嗎?當然不是,\d 便等價于 [0123456789],d 即代表著 digit。

\d\d\d\d\d\d\d\d\d\d\d 總比 [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] 要好。

常見的其他預定義類還有很多: \D 等價于 [^0-9] ,剛才提到,這是反向類,用來匹配所有非數字字符。\s等價于 [\t\n\x0B\f\r]匹配空白符,\S 匹配非空白符\w 等價于 [a-zA-Z_0-9] 匹配單詞字符,包括下劃線、橫線和數字。\W匹配非單詞字符。

\d\d\d\d\d\w,匹配的是什么呢?

量詞

當 \d 出現多次時,完全可以用代表數量的量詞來替換,十一個\d不如一個\d{11}簡單明了。

量詞 含義
? 出現零次或一次(至多一次)
+ 出現一次或多次(最少一次)
* 出現零次或多次(任意次)
{n} 出現 n 次
{n,m} 出現 n 到 m 次
{n,} 至少出現 n 次
{0,n} 出現最多 n 次

這時,\d{20}\w\d?\w\w+\d*\d{3}\w{3,5}\d{3,} 便可以達到大道至簡的地步,用可視化工具 Regexper 來直觀表示如下。

修飾符

之前一直提到 //g 是字面量正則表達式加上 g, global 全局模式查找符合規則的文本,而全局模式是默認關閉的。g 在這里存在,便稱作正則表達式修飾符。它可不是元字符。

其它修飾符有:i,ignore case,代表忽略大小寫,默認是不忽略的;m,multiple lines,跳過回車符等字符,在多行文本中進行匹配。

JavaScript 中的 RegExp() 方法

test()、exec() 以及 compile()。

  • test() 方法檢索字符串中的指定值。返回值是 true 或 false。
  • exec() 方法檢索字符串中的指定值。返回值是被找到的值。如果沒有發現匹配,則返回 null。您可以向 RegExp 對象添加第二個參數,以設定檢索。例如,如果需要找到所有某個字符的所有存在,則可以使用 g 參數。
  • compile() 方法用于改變 RegExp。compile() 既可以改變檢索模式,也可以添加或刪除第二個參數。

下例代碼可以實踐這一概念。

分組

經過正則表達式匹配到的文本不一定非得替換,有時我們還需要利用。例如用正則表達式將日期 2017-03-12 變成 03/12/2017 的格式,就需要在找出年月日的同時重新排序,這時便用的到“分組”的概念。

^(\d{4})[/-](\d{2})[/-](\d{2})$

可視化結果如下,看到了group關鍵字。

上例正則表達式匹配時,用()包住符合匹配規則的對象,這時,第一個被包住的(\d{4})是一個group,會把“年”賦值給$1,月、日便更好理解,分別為$2$3。如何實踐?

var reg = /^(\d{4})[/-](\d{2})[/-](\d{2})$/;
var string = "2017-03-12";
string.replace(reg, '替換前:$1-$2-$3, 替換后:$2/$3/$1');

以及更多

到了這里,也僅僅是開始,正則表達式是最需要自己動手去練習的知識點。還有更多的概念如正則表達式的零寬斷言、負向零寬斷言、注釋、貪婪與懶惰等就不細細說來。

5

正則官網實戰。FCC 西安社區的主頁,第一次公開到大家面前,是這個樣子,切合這次分享的內容。并新增環節,在官網上利用 Chrome 開發者工具直接實戰,兩道題目任你挑戰。答案呢,直接就貼在下方了。看與不看,“借鑒”與否,是自己的選擇,學到內容就好。

https://freecodecamp-xian.github.io/

6

FCC 線下編程社區不可或缺的環節,編程實戰!雖然線上我們可以做,但線下一起在線上做題的體驗,你有沒有體驗過呢?有問題,及時的互幫互助了。

End

我可能有個“假特長”,在上面的破冰活動中,“熟悉前端和后臺”當然是還不可能是我的真特長了。一個直奔全棧目標、只有一年半學習時間的 Web 學徒,在“熟悉”面前,更應謙虛為妙。也只是,略懂皮毛罷了。

FCC 西安第五次的活動就到了這里,相比較成都社區舉辦過的 10+ 次活動和主頁開發,相比最早成立的北京社區的整體技術更強性,FCC 西安,還有很多路要走。

在 FCC 這個新興無校園大學中,怎么畢業,就要看每個學員自己的選擇。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容