易截截图软件、单文件、免安装、纯绿色、仅160KB

JavaScript精粹读书笔记(7)

第7章
 
正则表达式
JavaScript
的许多特性都借
鉴自其他语言。语法借鉴自
Java
,函数借鉴自
Scheme
,原型继承借鉴自
Self
。而
JavaScript
的正则表达式特性则借鉴自
Perl

正则表达式起源于对形式语言的数
学研究。

JavaScript
中,正则表达式的语法是对
Perl
版的改进和发展,它非常接近源自贝尔实验室的原始形式。正则表达式的书写规则出奇的复杂,因为它们把
某些位置上的字符串解析为运算符,而把仅在位置上稍微不同的相同字符串又当作字符串本身。比不易书写更糟糕的是,这使得正则表达式不仅难以阅读,而且修改
时充满危险。要想正确地阅读它们,就必须对正则表达式的整个复杂性有相当彻底的理解。为了缓解这个问题,我对其规则进行了些许简化。这里所展示的正则表达
式可能稍微有些不够简洁,但也会让正确地使用它们变得稍微容易一点。
有点让人感到费解的是,
JavaScript
的正则表达式难以分段阅读,因为它们不支持注释和空白。正则表达式的所有部分都被紧密排列在一起,
使得它们几乎无法被辨认。当它们在安全应用中进行扫描和验证时,这点就须要特别地留意。如果你不能阅读和理解一个正则表达式,你如何能确保它对所有的输入
都能正确地工作呢?然而,尽管有这些明显的缺点,但正则表达式还是被广泛地使用着。
7.1
  
一个例子
这里有一个例子。它是一个用来匹

URL
的正则表达式。在
JavaScript
程序中,正则表达式必须写在一行中。正则表达式中的空白是至关重要的:
var
parse_url=/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
  
var
url="http://www.ora.com:80/goodparts?q#fragment";
让我们来调用
parse_url

exec
方法。如果能成功地匹配我们传给它的字符串,它将会返回一个数组,该数组包含了从这个
url
中提取出来的片段:
  
var
result=parse_url.exec(url);
  
var
names=['url','scheme','slash','host','port','path','query','hash'];
  
var
blanks='     
';
  
var
i;
  
for(i=0;i<names.length;i+=1){
     

document.writeln('<br
/>'+names[i]+':'+blanks.substring(names[i].length),result[


相关文档:

javascript 替换节点

这可能是最被忽略的文档操作之一,这都怪微软的不作为与W3C的无能,搞到大家只知道appendChild与insertBefore。后来爆出appendChild在IE有bug,好了,以后只用insertBefore了。现在jQuery兴起后,无数赶鸭子上架的javascript素人连基本API也不学了,直接上手append, preppend, before, after与replaceWith,这比较悲哀… ......

JavaScript重定向

使用JavaScript可以将用户导向一个特定的地址,并且不同的方法会对浏览器的历史记录有不同的影响。
实例JavaScript代码
本例定义了两个JavaScript函数,功能都是重定向到首页,但是第一个函数采用的是直接给href赋值的方式,第二个使用的是replace方法。具体请看下面的代码:
<script type="text/javascript">
f ......

ECMA 推出 JavaScript 5

ECMA 本周推出了 JavaScript 5(PDF),除了增强基础函数库之外,还引入了严格运行时模式(Strict Runtime Modes)以避免代码中的常见错误。ECMA ECMAScript 4 的努力曾以失败告终,ECMA 甚至没有发布 ECMAScript 4 细则。
过去几年,诸如 Nitro,TraceMonkey 一类的 JavaScript 引擎发展迅猛,JavaScript 成了 Google Wav ......

去除javascript数组中的相同元素

<script type="text/javascript">
function uniqueArr(arr)
{
    arr = arr || [];
    var a = {};
    for (var i=0; i<arr.length; i++)
    {
        var v = arr[i];
    &n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号