2008-09-17




JavaScript正则表达式总结

一、RegExp对象和字面量
     RegExp对象构造方式:
     var re = new RegExp("cat");
     var re = new RegExp("cat","gim");
     g:global,表示找到所有的匹配,如果不指定g选项,只匹配第一个
     i:不区分大小写
     m:匹配多行
     字面量方式:
     var re = /cat/;
     var re = /cat/gi;
     两者区别:
     非字面量来表达正则表达式时,对元字符转义必须用双重转义,而字面量不用,eg:
     var re = /?/; // ?为元字符必须转义
     var re = new RegExp('\?'); // 因为RegExp是用字符串来构造,而必须也转义,故得写成 '\?'
二、简单模式
     1、元字符
          (、[、{、、^、$、|、)、?、*、+、.
     2、使用特殊字符
          用ascii码和unicode表示字符
          t   制表符
          n   换行符
          r   回车符
          f   换页符
          a   alert字符
          e   escape字符
          cX   与X相对应的控制字符
          b   回退字符
          v   垂直制表符
          0   空字符
          以上特殊字符用非字面量方式构造表达式时,要双重转义
     3、字符类
         简单类:[]来表示单个字符有或的关系,如/[bc]/,匹配b或者c
         负向类:^来表示不匹配后面跟着的字符,如/[^bc],/不匹配b或c
         范围类:-来表示一个范围,如/[a-z]/,匹配a-z的字母,可以和负向类结合/^0-9/
         组合类:以上几种类组合而成的字符类,如/a-z0-9n/,匹配a-z的字母或者0-9的数字或者换行符
         类不能嵌套,就是不支持联合类和交叉类,/a-m[p-z]/和/a-m[^b-e]/在JavaScript中是非法的
         预定义类:
         .    =    [^nr]   除了换行和回车之外的任何字符
         d  =    [0-9]      数字
         D  =    [^0-9]   非数字
         s  =     [ tnx0Bfr]   空白字符
         S  =    [^ tnx0Bfr]   非空白字符
         w  =    [a-zA-Z_0-9]     单词字符(字母、数字、下划线)
         w  =    [^a-zA-Z_0-9]     非单词字符
     4、量词:某个模式出现的次数
         简单量词:
         ?   出现0或1次
         *   出现0或多次
         +   出现1或多次(至少1次)
         {n}   =n次
         {n,m}   >=n,<=m
         {n,}     >=n
         贪婪量词:先匹配整个字符串,如果不匹配则去掉最后一个字符再匹配,直到没有任何字符。所有简单量词都是贪婪的。
         惰性量词:和贪婪量词相反,即先匹配第一个字符,不匹配则匹配第一第二个字符,直到最后整个字符串。所有简单量词后面加?就是惰性的了。
         支配量词:只匹配整个字符串一次,不匹配就结束。所有简单量词后面加+就是支配的了。
三、复杂模式
     1、分组:用括号来包括一些字符、字符类、量词来使用的。个人理解为可以将字符、字符类、量词等用括号来组成一个单元,可以对这个单元使用量词,同时这个单元是被存储起来的。分组可以嵌套。
     2、反向引用:每个分组都是被存储起来的,存储在分组中的匹配值称为反向引用。
         使用正则表达式的test、match、search方法之后,可以通过正则表达式的实例变量来访问到反向引用。RegExp.$1,RegExp.$2...来访问反向引用。
         可以直接在分组表达式中使用分组。eg:var re = /dog1/,转义1就引用了第一个反向引用
         可以在String的replace方法中通过特殊的序列$1、$2来访问反向引用。eg:var sToChange = '1234 5678';var reMatch = /(d{4}) (d4)/;var sNew = sToChange.replace(reMatch,'$2 $1');很轻松的实现单词的顺序转换。
     3、候选:用|来表示模式的或关系。
     4、非捕获性分组:创建反向引用的分组是捕获性分组,不创建反向引用的分组就是非捕获性分组。eg:(?:bad)
     5、前瞻:某个特定的字符分组出现在另一个字符串之前时才捕获,正向前瞻要放在(?=和)之间(不是分组),负向前瞻放在(?!和)之间。eg:/(bed(?=room))/匹配跟在room前面的bed;/(bed(?!room))/匹配不跟在room前的bed。
     6、边界:^行开头,$行结尾,b单词边界,B非单词边界。
     7、多行模式:m选项打开,能影响^和$,使^匹配开头和换行符后面的位置,$匹配真正的结尾和换行符。
        
    
    
    
    

2008-09-13

Chrome印象


自从Google Chrome发布以来,各大媒体争相报道,各个牛人出来发表一番评论。。有人批评有人褒扬,据说下载人数达到几百万了。。市场占用率统计也超过Opera了,试用人数比使用IE8的要多。。具体统计数据我不清楚。。只是站在一个普通程序员的角度说下个人的看法。

Chrome是基于webkit核心的。据说webkit非常小巧且功能强大,比firefox的核心引擎Gecko要小巧的多。据说Gecko非常复杂,代码非常多,尽管功能非常强大,占用内存也非常多,Mozilla也一直在改进,并且Mozilla也一直在发展一个javascript的引擎,据说比Chrome的v8要快27%。但是我觉得好像Chrome占用内存比Firefox3.0要多不少呢。

第一印象:

Chrome的第一印象是非常简洁,没有工具栏和菜单,秉承了Google的一贯风格,比如google的首页等。只有标签页和地址栏,操作起来也非常顺手,也挺快,看上去很清爽,还算比较喜欢。

内存占用和速度:

今天用Google Docs在写东西,开了一个一个窗口,其中一个是Google Docs的首页,第二个窗口有3个标签页,占用内存还真不少。这些都是Ajax页面,也都是相当占资源。一共169M多。并且有时响应比较慢。突然不动了,过一小会才会好。
我的Firefox3.0.1开了6个标签页,其中一个是GMail。也占了大概160多M。
Firefox3.0以后,内存占用是比以前少的了,2.*时,开几个标签,放一个上午,有时内存占用最多能达到近500M,3.0还没发现占用这么多的时候。并且3.0以后,速度比2.*也是快了不少。
感觉内存占用上,Chrome比较多,比Firefox还要多。速度上,几乎差不太明显。至于Chrome的多进程方式,也不错。

扩展:

目前Chrome还是Beta,没有提供插件机制,我想用Firefox最大的好处就是插件多吧,其次才是速度快、安全、更符合标准、bug修复速度快等等优点。不过Chrome内置了Google Gears。运行Google Docs和Google Reader可以直接启用offline功能。这点都是由预谋的。Google Gears提供的离线存储功能,对以后Google基于Chrome的所谓云计算,应该会提供非常多的支持。并且现在若干个Google服务都已经支持基于Google Gears的离线功能了。


总结:


总的来说,对Google而言,推出自己的浏览器,就是为以后Google的未来搭建一个平台,所有基于Google的服务都很容易就能在Chrome在运行,相当于一个客户端了。试想全球那么多用户使用Chrome,Google想在浏览器上做点什么手脚,集成点自己的服务,比如Google Toolbar(Chrome竟然没有集成Toolbar,这点我也比较惊讶,Google Gears已经有了)、或其他的服务,简直太容易了吧。至于在服务里投放广告之类,更容易了。不过像微软已经开始以什么明目起诉Google了。老实说,很明显的,google在Chrome集成google的搜索服务,就像IE8里集成live搜索一样(google也投诉了吧,嘿嘿),这应该是必然的事,不过google也得做好被微软之类起诉垄断或者应对其他攻击方式的准备吧。

Google的目标应该会比较长远。。


2008-09-06

在线状态下编辑,现在断开网络。


现在是在断开网络的情况下继续编辑编辑。。。


在Chrome中,内置对Google Gears的支持,就测试下Google Docs的离线操作。在启用Gears之后,在桌面创建图标,然后同步。同步后,断开网络,看到Docs检测到在离线状态下编辑。现在编辑完之后,连上网络。。

在用笔记本电脑的情况下,离线状态下写文档,上线之后自动同步,还是非常有用的。。。
可惜,我不习惯用本本,也没有本本。。嘿嘿。。
唉,不知道在blgger写博客,会不会有人看。。

2008-08-27

一等好多年。。
一直觉得Google Docs和Blogspot结合是最好的,可是Blogspot被封这么几年了,终于在奥运前解封。。GFW。。也不知道能持续多久,希望以后不要再被封了。。
前段时间sourcefore被墙了之后,实在是忍无可忍,终于戴上TOR,勉强能上,可慢的要死。。
看现在Docs直接发布到blogspot的效果如何。。

2007-04-01

JavaScript正则表达式总结

一、RegExp对象和字面量
RegExp对象构造方式:
var re = new RegExp("cat");
var re = new RegExp("cat","gim");
g:global,表示找到所有的匹配,如果不指定g选项,只匹配第一个
i:不区分大小写
m:匹配多行
字面量方式:
var re = /cat/;
var re = /cat/gi;
两者区别:
非字面量来表达正则表达式时,对元字符转义必须用双重转义,而字面量不用,eg:
var re = /?/; // ?为元字符必须转义
var re = new RegExp('\?'); // 因为RegExp是用字符串来构造,而必须也转义,故得写成 '\?'
二、简单模式
1、元字符
(、[、{、、^、$、|、)、?、*、+、.
2、使用特殊字符
用ascii码和unicode表示字符
t 制表符
n 换行符
r 回车符
f 换页符
a alert字符
e escape字符
cX 与X相对应的控制字符
b 回退字符
v 垂直制表符
0 空字符
以上特殊字符用非字面量方式构造表达式时,要双重转义
3、字符类
简单类:[]来表示单个字符有或的关系,如/[bc]/,匹配b或者c
负向类:^来表示不匹配后面跟着的字符,如/[^bc],/不匹配b或c
范围类:-来表示一个范围,如/[a-z]/,匹配a-z的字母,可以和负向类结合/^0-9/
组合类:以上几种类组合而成的字符类,如/a-z0-9n/,匹配a-z的字母或者0-9的数字或者换行符
类不能嵌套,就是不支持联合类和交叉类,/a-m[p-z]/和/a-m[^b-e]/在JavaScript中是非法的
预定义类:
. = [^nr] 除了换行和回车之外的任何字符
d = [0-9] 数字
D = [^0-9] 非数字
s = [ tnx0Bfr] 空白字符
S = [^ tnx0Bfr] 非空白字符
w = [a-zA-Z_0-9] 单词字符(字母、数字、下划线)
w = [^a-zA-Z_0-9] 非单词字符
4、量词:某个模式出现的次数
简单量词:
? 出现0或1次
* 出现0或多次
+ 出现1或多次(至少1次)
{n} =n次
{n,m} >=n,<=m
{n,} >=n
贪婪量词:先匹配整个字符串,如果不匹配则去掉最后一个字符再匹配,直到没有任何字符。所有简单量词都是贪婪的。
惰性量词:和贪婪量词相反,即先匹配第一个字符,不匹配则匹配第一第二个字符,直到最后整个字符串。所有简单量词后面加?就是惰性的了。
支配量词:只匹配整个字符串一次,不匹配就结束。所有简单量词后面加+就是支配的了。
三、复杂模式
1、分组:用括号来包括一些字符、字符类、量词来使用的。个人理解为可以将字符、字符类、量词等用括号来组成一个单元,可以对这个单元使用量词,同时这个单元是被存储起来的。分组可以嵌套。
2、反向引用:每个分组都是被存储起来的,存储在分组中的匹配值称为反向引用。
使用正则表达式的test、match、search方法之后,可以通过正则表达式的实例变量来访问到反向引用。RegExp.$1,RegExp.$2...来访问反向引用。
可以直接在分组表达式中使用分组。eg:var re = /dog1/,转义1就引用了第一个反向引用
可以在String的replace方法中通过特殊的序列$1、$2来访问反向引用。eg:var sToChange = '1234 5678';var reMatch = /(d{4}) (d4)/;var sNew = sToChange.replace(reMatch,'$2 $1');很轻松的实现单词的顺序转换。
3、候选:用|来表示模式的或关系。
4、非捕获性分组:创建反向引用的分组是捕获性分组,不创建反向引用的分组就是非捕获性分组。eg:(?:bad)
5、前瞻:某个特定的字符分组出现在另一个字符串之前时才捕获,正向前瞻要放在(?=和)之间(不是分组),负向前瞻放在(?!和)之间。eg:/(bed(?=room))/匹配跟在room前面的bed;/(bed(?!room))/匹配不跟在room前的bed。
6、边界:^行开头,$行结尾,b单词边界,B非单词边界。
7、多行模式:m选项打开,能影响^和$,使^匹配开头和换行符后面的位置,$匹配真正的结尾和换行符。





2007-03-17

夜宴和满城尽带黄金甲

昨天在迅雷上下了张艺谋的“满城尽带黄金甲”,个个都是爆乳。。嘿,就差乳头了。。
夜宴比满城尽带黄金甲好看。。
夜宴的故事比满城尽带黄金甲丰满一点点,虽然满城女人个个爆乳。。。。
叔叔杀了侄子的老爸,呵呵,大家能想到什么??莎士比亚的汉姆雷特啊。。。
同父异母的兄妹发生关系??这可是乱伦。。。大家应该更熟悉了。。根本就是曹禺的雷雨嘛。。
黔驴技穷的老谋子。。

我的blog计划

以后坚持每周写2-3篇blog,记录自己的一些想法,记录开发心得,记录自己的成长轨迹(呵呵。。),记录自己的感情经历(八卦一下。。)。。。
呵呵。。希望大家都来坐坐。。。