JavaScript正则使用点滴

写在前面:关于“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不知所然,现在联系到这一点,终于有点眉目了……呵呵

上一篇:jQuery操纵DOM元素属性 attr()和removeAtrr()方法使用详解


下一篇:英特尔 Skylake 处理器 bug: 可通过 USB 接管计算机