《正则表达式必知必会》阅读后记

正则表达式必知必会》是人邮图灵《xxx必知必会》一套系列的书,作者都是 Ben Forta。这一套“必知必会”系列除了MySql那本外全都看过了。非常适合本人,爱不释手。特点是:快速入门并且专捡实际工作中有用的讲。阅读这类书几乎就是喝一两杯咖啡的时间可以翻四到五章。作者能写这套入门书说明他的功底深厚而且极善表达,可以把复杂的东西变得简单明了。

在翻译上,有几个与其他翻译有不同的:character classes 在《精通正则表达式(第3版)》中译为:“字符组”(见第1章),在本书中译为:“字符类”(见第28页第4章第3节第一段第5行); backreference 在《精通正则表达式》和《正则表达式语法参考》文档中都译为:“反向引用”。还有,正则表达式中有个专用术语:“量词”,这个术语似乎在本书中没有出现。

整个看下来就第十章是本人没能完全理解明白的,主要是没用心看。因为在第九章中讲:JavaScript不支持向后查找(lookbehind),而“前后查找”以前没接触不了解,所以在第十章编写前后查找条件在JavaScript中实现不了。引用书中的原话:“嵌入条件不经常被用到”,“条件模式看起来非常复杂”。这个问题留给自己以后再思考吧!

最后的一点好处是:JavaScript书大多都有正则表达式的章节,以后阅读时可以加深理解和回顾容易遗忘的内容。

比如在《JavaScript高级程序设计(第2版)》中正则表达式的内容在第5章的第4节 RegExp 类型。从中可以知道,创建正则表达式用字面量与用RegExp构造函数,在语法上有什么不同。下面是书中的原文(延伸阅读部分内容):

正则表达式既可以用字面量定义,也可以用构造函数定义,如下所示:

/*
 * 匹配 bat 或 cat 的首个例子,重点是后面的那个
 */
var pattern1 = /[bc]at/i;
/*
 * 与 pattern1 等价,就是用构造函数
 */
var pattern2 = new RegExp("[bc]at", "i");

pattern1 和 pattern2 正则表达式定义是等价的。注意在RegExp构造函数中的 argument(引数或参数)均为字符串,而正则表达式的字面量不会传入RegExp构造函数中。RegExp构造函数的argument 是字符串模式,用到转义字符的那些实例就必须由一次转义写成两次转义(double-escape),如:\n(字符\由\\变为\\\\)。

下表显示的是一些字面量与字符串等价的模式:

字面量模式 等价字符串

/\[bc\]at/

”\\[bc\\]at”

/\.at/

“ \\.at “

/name\/age/ 

“ name\\/age “

/\d.\d{1,2}/

“ \\d.\\d{1,2} “

/\w\\hello\\123/  

“ \\w\\\\hello\\\\123

所以,你可以用实例的 source 属性去查看字符串的源是否与所要的字面量一致。

alert(pattern2.source);     //”\[bc\]at”

另外,JavaScript正则表达式不支持以下几种模式:

  • POSIX字符类
  • \A和\Z
  • 并类别、交类别
  • 向后查找
  • Atomic grouping(原子分组)
  • Unicode 的支持
  • 命名捕获分组
  • s 和 x 这两种匹配模式
  • 条件语句
  • 正则表达式注释
posted on 2009-10-25 20:22  豆豆の爸爸  阅读(608)  评论(0编辑  收藏  举报