注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

骇客归来

ぁ枫あ

 
 
 

日志

 
 

正则表达式(javascript)语法总结  

2007-01-27 14:22:16|  分类: Javascript |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1,建立一个正则表达式

正则表达式是一种字符串匹配的技术,在javascript中有两种建立正则表达式的方法,
一种是使用正则表达式文字常量,正则表达式文字常量使用"/"间隔,例如 var re=/^javacript\b/ig
另外一种是使用RegExp构造函数,例如var re=new RegExp(“^java[sS]cript”, "ig"),

update:当使用RegExp构造函数的时候,要将正则表达式文字常量中的每个“\”转换为“\\”

其中ig是正则表达式的标志,
i表示不区分大小写,
g表示全局匹配,
另外javascript中还支持一个m(多行)标志, 当使用这个标志时,^ 不但匹配字符串的开始而且匹配一行的开始, $ 不但匹配字符串的结尾,而且也匹配一行的结尾

2,普通字符和元字符

在正则表达式中有两种字符,一种表示字符本身,例如a-zA-Z0-9等字符,有的字符具有特殊的意义,例"."表示除了换行符以外的所有字符,叫做元字符,元字符有下面一些:


^   $   .   *   +   ?   =   !   :   |   \   /   (   )   [   ]   {   }
要匹配元字符本身,可以在字符前加上“\”,这样元字符就没有原来的意义,而表示字符本身,注意的是上面的有些字符只是在特殊的用法中表示元字符,一般表示字符本身

3,字符类

单个的字符可以组成字符类(character classes),字符类使用[]分割开,例如[abc]表示可以匹配字符a或b或c,当字符类使用“^”开头时,表示匹配字符类中指定的字符以外的字符,例如[^abc]匹配除开abc以外的所有字符

另外在字符类中可以使用“-"连字符,a-z A-Z 0-9 分别表示,所有小写字母、所有大写字母以及所有数字

例外系统本身已经定义了很多“预定义字符类”:
\d \D:表示数字和非数字,\d等价于[0-9],\D等价于[^0-9]
\w \W:分别表示单词字符和非单词字符,\w等价于[a-zA-Z0-9_]
\s \S:表示空白字符和非空白字符
.:匹配除了换行符以外的所有字符

4,限定符(重复)

表示前面的字符重复的次数,有如下几种:
*:表示前面的部分(一个字符或字符类或者圆括号括起的部分)重复0次或者更多的次数,例如a*,匹配0个或多个a
?:表示可有可无,等价于{0,1}
+:表示1次或多次
{n,m}:n到m次
{n}:刚好n次
{n,}:大于c次

重复包括贪婪重复(默认的)和非贪婪重复,例如 /.+/ 将匹配"abdddd"中的所有字符,/.+?/ 只将匹配"abdddd"中的第一个a,也就是默认的尽可能多的匹配字符,而非贪婪重复则尽可能上的匹配

使用非贪婪重复很简单,在原来的限定符后加上?就可以了

不过要注意的一个问题是,匹配都是从字符串的开头部分向后匹配的,所有 /a+?b/ 将匹配 "aaaaabk" 中的 aaaaab,而不仅仅是ab

5,选择、分组和引用

使用 “|”表示重复,例如 /a|bn/ 匹配a或bn,要注意的是|的优先级相当的低,除非你使用括号,否则它表示匹配”|“的左边所有部分或者右边部分

使用()括起来的部分表示分组,分组的部分可以在匹配结束后返回或者在同一正则表达式的后面引用(使用\1,\n等形式引用),一个经典的应用是匹配html中的链接 /<a[^<>]* href=([’"])[^’"]+\1>/ig,\1表示同一正则表达式中的[’"]匹配的内容(‘ 或者 “)

如果你使用()仅仅是为了避开优先级等问题,而不想返回和后面引用,可以使用(?:…..),可是如果我仅仅想在后面引用而不想返回我该怎么办呢? 我也不知道啊,有知道的告诉我一声啊

6,定位符(锚)和前向引用

一般的字符或元字符匹配真实存在的字符,还有一类元字符仅仅匹配一个位置而已,例如上面看到的^和$匹配字符串的开始和结尾这两个位置而不是存在的两个字符

除了^和$外,还有以下的锚字符:
\b:匹配单词边界,例如一个\w和\W的位置,或者一个\w与字符串的开始和结尾的位置
\B:和上面的想法,匹配一个非单词边界

除了这些预定义的的定位符,还可以自定义定位符,这种类型的定位符叫做前向引用(look-ahead anchor)和后向引用(look-behind anchor,javaacript不支持)

前向引用使用(?= … )表示正的前向引用,(?!…)表示负的前向引用

下面是一个前向引用的例子 /Java(?!Script)([A-Z]\w*)/ 其中(?!Script)匹配后面不跟Script的位置,而(?=Script)匹配后面是Script的位置

这篇文章是javascrpt权威指南中 “Defining Regular Expressions”的一个总结,下面一篇文章将介绍一下javascript中正则表达式的具体用法

  评论这张
 
阅读(219)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017