0%

正则表达式是一种描述句法规则的语言。在学习正则表达式的时候, 直接从某种程序语言的正则表达式 API 入手的我总感觉正则表达式非常复杂, 难以掌握。因此,我决定从另外一种角度重新审视一下正则表达式。

本文将会从正则表达式的数学原理出发, 看正则表达式如何仅仅从用 3 种基本运算就能够表示各种各样的句法规则。

阅读全文 »

今天遇到了一个看似 trivial ,但是深挖进去却很有趣的问题——如何更快地复制一个字符串。

阅读全文 »

1 月的北京风和日丽。我做好了一个需求,估摸着该提 PR 合并到主仓库了。 于是,我准备和主仓库master分支rebase一下,然后整理一下 commit 记录。临近下班了, 又要面对一天中最困难的问题——晚上吃什么?楼下那家 KFC 的菜单已经吃完一轮了。 突然之间,我隐隐感觉有一点不太对劲。一看git log。Oh shit!!

阅读全文 »

CSS应该怎么写?当被问到这一个问题的时候,我懵了。之前在个人项目中写CSS都是随心而写,最后显示效果也还可以,所以一直没注意到这个问题。回想到之前在修改样式的时候遇见了修改文章的样式却造成了全局布局的更改,原因是文章的容器类与一个全局布局相关的容器类意外重名了。在小型项目中尚且如此,如果在大型项目中随心而写,后果那就可想而知了。emmmmmm。CSS该怎么写,确实是一个值得思考的问题。

阅读全文 »

"Everyone, Creator"是2012年Google Chrome与初音未来(Hatsune Miku)联动广告的一句广告词。尽管现在已经是六年以后了,这句广告词仍然令人心潮澎湃。

阅读全文 »

在开发Web应用时,如果我们的需求缺少一个不那么简单而又不想亲自动手写的工具时,我们会向Google老师求助,看到一个npm包恰好能够满足,然后npm install package一把梭,require解决问题。完美的工作流,体现了JavaScript社区的开放与强大。但是,最近一个月下载量达百万的包event-stream被注入了恶意代码。恶意代码会尝试劫持另外一个包中的bitcore-wallet-client.getKeyFunc方法。如果一个项目同时依赖了event-streamcopay-dash,当bitcore-wallent-client中的getKeyFunc运行时,恶意代码会检查钱包的id,持有比特币BTC的数量以及比特币现金BCH的数量。如果BTC数量大于100或者BCH数量大于1000,就将钱包的公钥发给一个地址。

当我看到这个新闻的时候,我心里想,我没写过写区块链相关的对象,应该不会被影响到吧。但是当我没事跑一下检查方法时,结果却傻眼了:

检查结果

我中招了!

阅读全文 »

Koa2里支持两种中间件的写法,一种是使用ES7async/await语法的异步函数,这里我们称为异步中间件。一种是使用普通函数语法的普通中间件。尽管说官方支持两种写法,但是在实际应用中,我们可能不大常见普通中间件的写法。为什么呢?

阅读全文 »

Vue中父组件到子组件的通信主要由子组件的props属性实现。但是在一些情况下,父组件无法直接向子组件的props传值。比如子组件通过父组件的slot进入父组件,父组件根本不知道子组件是谁,更不用说用子组件的props了。这时应该怎么办呢?Vue2.2.0版本引入了provideinject,正好适合处理这一情况。

阅读全文 »