JavaScript正則使用點滴

來源:互聯網
上載者:User

寫在前面:關於“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不知所然,現在聯絡到這一點,終於有點眉目了……呵呵

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.