208

《JavaScript 正则表达式迷你书》问世了! - 知乎专栏

 6 years ago
source link: https://zhuanlan.zhihu.com/p/29707385?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

《JS 正则迷你书》的作者、组织翻译《斯坦福程序设计入门课》

1.1版,下载链接:https://github.com/qdlaoyao/js-regex-mini-book

v2-dbed03216ed3ffa54af6ca507e2ae42b_720w.jpg

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

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

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

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

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

最后,尤其要感谢各位大佬帮我写的推荐序。他们的名字不分先后如下:大漠穷秋、小鱼二、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键上面的那个字符,反引号)


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

欢迎你随时的反馈。

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK