虾编
首发于虾编

《JavaScript 正则表达式迷你书》问世了!

1.1版,下载链接:github.com/qdlaoyao/js-

感谢

由于本书是由个人文章修改而成,感谢各平台读者的支持。

感谢湖山,是他说我该把这些东西写出来的。

感谢小不,他在多方面给予了我帮助,封面是他设计的。

感谢小鱼二,他对全书进行了仔细地校对,并提出了相应的修改意见。

感谢丹迪的支持,他为我设计了多个封面,风格比较前卫,留给后续版本。

最后,尤其要感谢各位大佬帮我写的推荐序。他们的名字不分先后如下:大漠穷秋、小鱼二、Jack Lo、程序猿DD、江湖人称向前兄、文蔺、_周末、Dark_Night。

后记

我竟然写了一本书!想想就挺开心的。

这是个人的第一本书,虽然不厚,但也算是完成了个人的一个小梦想了。

说起正则表达式,我之所以会去详细地研究它,最初的动机是,当我分析前端常见的框架和库的源码时,发现一般被卡住的地方就是它。后来逐渐学习并看懂了“天书”,仿佛进入了一个新世界。

有些工具就是这样,当你没有它时,可能并未觉得有啥不好,可是一旦你拥有了它,再也放不下手了。掌握正则了后,对字符串一些复杂操作,竟然能很快地实现。看待问题的角度也发生了改变,每次看着精炼的正则代码,总是感觉真是妙不可言。

当然,对我而言,正则表达式不仅应用在代码里。生活中也会经常使用它。比如个人平时回答网友问题时,一些网站私信里贴的代码中字符都是转义的。此时我都会贴到某个编辑器里,然后写个正则,再一次性替换,真方便。

另外一个例子是,一些代码编辑器的代码格式化功能,总有让人不舒服的地方,此时我都会用写好正则表达式,再格式化一下。

还有一个很应景的例子,在编辑本书时,经常要在指定位置插入特定的语法格式,比如代码段前面要插入

[source,javascript]
----

这样的字符,此时,我发现我的大部分代码段,都是var开头的,并且前面有一空行。此时我打开查找替换功能,查找

(^\r\n)var

替换为

[source,javascript]\n----\nvar

这确实也帮我解决一部分工作。

当然,正则表达式是跟具体语言(比如JavaScript)无关的。因为正则表达式是用来处理字符串问题的,基本上每门语言都有字符串类型,那么也都会支持正则表达式的。正则表达式是分流派的,也跟实现引擎有关。而JavaScript用到的正则表达式的语法,是市面常见语言都支持的核心子集。关于API,各语言基本大同小异,想用的话,应该很快就能熟悉起来。

关于正则表达式就说到这里,下面说一说自己写这本书的收获。

有人说最好的学习方法就是写一本书。其实,要想把知识掌握牢固,归根到底就是用起来。写书或者说写作是一种很好的以教为学的手段。毕竟,形成文字,教给别人算是对知识的最直接的应用了。看似为了教,其实是为了学。只有教会别人才说明你掌握了。“以教为学”的手段除了写东西之外,还有翻译、以及面对面的辅导等。

以目标为导向的做中学,是比较有效的学习手段。本书是用Asciidoc写成的。它类似于Markdown,但在此书之前本人都没有用过。以需求为驱动,逐步百度检索,自己才逐渐把书整理好了。其中遇到了很多与语法无关的问题,比如转换pdf的过程中用的工具运行不起来,自己寻找原因,凭着感觉修改版本号等。又比如导出的pdf有缺字的问题,百度明白后才发现跟字体有关。边干边学,每解决掉一个问题,都挺有满足感的。带着问题去研究去学习,这是一种问题思维。然而一时的解决方案还不够,后来我详细地阅读了Asciidoc使用手册,也经常有“原来,还可以这样写!”的体会。

这点跟我们平常工作很像,以项目为导向,用啥学啥。比如初学一个框架,先干起来,边看文档,边敲代码。代码敲完了,还要详细地看一遍文档,届时会发现还有更好的实现方式。不只有眼前的苟且,还会有明天的迭代。

另外一点,我深深体会到了,干着简单繁杂的工作是怎样的体验。一遍遍校对,一遍遍修改。每次看,都会发现新的待完善的地方。以至于现在我感觉已经能把本书背下来了,单调的工作确实考验人的耐心。

就写到这里吧。如果你觉得此书不错的话,欢迎赞赏(书中有微信二维码的)。

d3hwOi8vZjJmMHN1OGttU1ZmN1Y4WTVOVFh4V2NKeEhRdHgzbnRKRlpi (二维码自动识别)

最后,我们该想起陆游诗人对前端做出的贡献:

纸上得来终觉浅,觉知此事要躬行。

完。




欢迎大家来挑毛病,书中也有本文的链接。

有任何问题,都可以在本文内评论提出,不管问题大小都可以,我都会尽力回答的,比如笔误的地方或没说清楚的地方。

修改后,会重新上传百度云,届时下载的链接地址也会相应改变。

至于大的改动,就是版本改动了。以后会添加一些新的章节和案例,让本书再厚点儿。




2017/10/08 1.1版本发布

谢谢各位读者的指正,v1.0有的地方确实有笔误。

有几处在内部浏览时就已经被人指出,之前就改过,可能是没保存,或者ctrl+z时又不小心又改回去了,导致的。

这些错误,产生的大部分原因是:在asciidoc格式中,一些特殊字符有特殊的含义。而本书是关于正则的,自然会有不少特殊字符(使用asciidoc格式写书的同学要注意,修改对策是转义)。另外几处是新发现的。

v1.1修改的地方如下:


1.阅读器第25页,即书中第20页,2.3节

其中,/\^hello$/ 修改成 /^hello$/,多了一个 \


2.阅读器第28页,即书中第23页,2.4.2.5节

其中,/\B(?=(\d{3})+\b)/ 修改成 /\B(?=(\d{3})+\b)/g,少了一个 g


3.阅读器第28页,即书中第23页,2.4.3.3节

其中,(?=.[0-9])(?=.[a-z]) 修改成(?=.*[0-9])(?=.*[a-z]),少了两个 *


4.阅读器第62页,即书中第57页,6.3.2节

其中,/^[-]?(\d)?(\.\d+)?$/ 改成 /^[+-]?(\d)?(\.\d+)?$/,少了一个 +。这一页中,还有同样的几处也有此问题。


5.阅读器第74页,即书中第69页,7.2.7节

其中,第三行,匹配左边文本时,属性是 $`,少写一个 `(tab键上面的那个字符,反引号)


以上错误都是来自于各平台读者的反馈。谢谢你们,你们是认真的读者。

欢迎你随时的反馈。

文章开头的下载链接已修改。

编辑于 2018-11-16

文章被以下专栏收录