写在前面:关于“railroad diagrams”,摘抄自网络:http://202.207.0.245:9001/jisuanjifazhanshi/tuling/19.htm
我们目前所看到的许多语言的BNF实际上是EBNF,不过人们往往忽略掉这个E字。和BNF一起出现的,还常常有一些看上去像铁路图那样的图形,称作“语法图”(syntax chart或syntax diagram)或“铁路图”(railroad diagram),这也是由沃思所设计与发明的,这种图形标记法的描述能力等价于BNF,但当然更易于阅读与理解,更加直观。
p.s:可惜源地址的图不全,,不然……
正则复杂起来可能会感觉有点繁复(slightly less terse),但正确性会提高(slightly easier to use correctly)。
JS的正则不支持空白符,所以不支持注释。《Good Parts》理由竟然是安全理由:
This is a particular concern when the are used in security applications for scanning and validation.
但一方面书中又提出:
If you cannot read and understand a regular expression, how can you have confidence that it will work correctly for all input?
最后道出某种无奈:
Yet, despite their obvious drawbacks, regular expresssions are widely used.
什么是Sloppy Regluar Experssions?就是与Rigorous Regular Expresssions相对的正则。虽然写起来容易,但它是许多安全的问题的来源!?
Sloppy regular expressions are a popluar source of security exploits.
D.C指出JS的RegExp库的兼容性问题最少,因为这玩意的核心复杂的很,一般不会作多大的变动。注意用literal方式写正则其实是共享一个实例。例如:
function makeMatcher(){
return /a/gi;
}
var x = makeMatcher();
var y = makeMatcher();
// Beware: x and y are the same object!
x.lastIndex = 10;
alert(y.lastIndex); // 10说白了,其设计就是设计模式中的flyweight模式。回想起以前的一个bug不知所然,现在联系到这一点,终于有点眉目了……呵呵