寫在前面:關於“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(){<br /> return /a/gi;<br />}<br />var x = makeMatcher();<br />var y = makeMatcher();<br />// Beware: x and y are the same object!<br />x.lastIndex = 10;<br />alert(y.lastIndex); // 10說白了,其設計就是設計模式中的flyweight模式。回想起以前的一個bug不知所然,現在聯絡到這一點,終於有點眉目了……呵呵