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阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容