hylerrix / university

:mortar_board: my university code & article collection: create & share, thought & works
Creative Commons Attribution Share Alike 4.0 International
45 stars 10 forks source link

[B06]MEAN 架构下的 FCC | FCC 西安线下编程活动体验 #05 #38

Open hylerrix opened 7 years ago

hylerrix commented 7 years ago

相距 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 项目,有如下特点:

再对比 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()。

下例代码可以实践这一概念。

分组

经过正则表达式匹配到的文本不一定非得替换,有时我们还需要利用。例如用正则表达式将日期 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 这个新兴无校园大学中,怎么毕业,就要看每个学员自己的选择。