本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7592675
建立时间:2006年5月29日




[Javascript]正则表达式--简单模式
软件技术

lhwork 发表于 2006/9/19 15:40:52

    作者:Flyingis    正则表达式除了用来匹配一些特殊字符外,还有许多其他的作用。Metacharacters,character classes和quantifiers都是正则表达式语法中的重要组成部分,可以用来实现更强大的功能。     Metacharacters    正则表达式的Metacharacters主要包括:    ([{\^$|)?*+.    当需要使用这些符号的时候,需要在前面加上一个反斜杠"\",例如:500)this.width=500'>var reg = /\?/;500)this.width=500'>var reg = new RegExp("\\?");    一个字符的表示可以使用它的文字符号,也可以使用ASCII码或Unicode码来代码它。例如,当一个字符使用ASCII码表示的时候,我们需要在一个两位十六进制的编码前加上"\x"。500)this.width=500'>var name = "apple";500)this.width=500'>var regName = /\x61/;500)this.width=500'>alert(regName.test(name));  //输出"true"    当然,使用十进制来表示字母a。500)this.width=500'>var reg = /\141/;    使用Unicode来表示一个字符,需要四位十六进制的编码,例如\u0062代表b。500)this.width=500'>var s = "big";500)this.width=500'>var reg = /\u0062/;500)this.width=500'>alert(reg.test(s));  //输出为"true"    下面一段代码可以到达同样的效果:500)this.width=500'>var s = "big";500)this.width=500'>var reg = new RegExp("\\u0062");500)this.width=500'>alert(reg.test(s));  //输出为"true"    另外,有一些预定义好的特殊字符,用来表示特殊的含义。如:“\t,\n,\r,\f,\a,\e,\cX,\b,\v,\0”。500)this.width=500'>//将用户输入的新一行的所有字符都删除500)this.width=500'>var str = strWithNewLines.replace(/\n/g, "");    Character classes      Character classer代表着需要匹配的一组字符,将需要匹配的字符放在一对中括号里,正则表达式将能有效的识别第一个字符,第二个字符,等等。    Simple classes    如果需要同时匹配"pig"和"big",可以使用simple character class来实现:500)this.width=500'>var str = "pig, big";500)this.width=500'>var reg = /[pb]ig/gi;500)this.width=500'>var arr = str.match(reg);    此时,arr中的数据包括"pig"和"big"。当然,使用ASCII或Unicode来表示p或b同样可行。    Negation classes    有时我们需要匹配除了少数几个字符外的所有字符,在这种情况下,我们可以使用negation class来进行匹配。例如,匹配除了a和b之外所有的字符,可以表示为[^ab]。在上一个例子中,将reg表示为/[^p]ig/gi,则结果中将过滤掉pig。    Range classes    顾名思义,range class就是用来指定某个范围的匹配字符,例如从a到z可以表示为[a-z],从1到10可以表示为[1-10]。如果将range class指定的字符排除在外,可以使用[^1-10],表示除了1到10范围外的所有字符。    Combination classes    举一个例子就清楚了,现在需要匹配从1到10,从a到g,并且加上新一行的所有字符,可以表示为[1-10a-g\n]。注意,在[]里不允许再嵌套[]。      Predefined classes    因为有许多样式都不停在重复使用,因此一组预定义好的character classes可以用来简化一些比较复杂的类型。具体的可以参考相关资料,下面举个简单的例子:  500)this.width=500'>var str = "8743 apple";500)this.width=500'>var reg = /[0-9][0-9][0-9]/;500)this.width=500'>alert(reg.test(str));  //输出为"true"      使用predefined class可以写成:500)this.width=500'>var str = "8743 apple";500)this.width=500'>var reg = /\d\d\d/;500)this.width=500'>alert(reg.test(str));  //输出为"true"    Quantifiers      Quantifiers能够指定某种匹配方式需要进行多少次,包括指定确定的次数,或不确定的次数如至少多少次。    Simple quantifiers    下面列表中,指定了某种模式需要重复进行的次数,部分符号和闭包的意义一样:500)this.width=500'>    例如var reg = /b?read/就可以表示bread或read。      三种正则表达式的quantifiers    Greedy quantifier: 对一个目标串进行匹配搜索,当在目标串中没有相匹配的字符串时,就删去目标串的最后一个字符,再次进行匹配,如果没有发现则再删去最后一个字符,依此类推,最后的结果要么已经将字符匹配上,要么目标串已经为空。    Reluctant quantifier: 和greedy quantifier搜索风格相反。Reluctant quantifier从目标串的第一个字符开始对目标串进行搜索,当没有匹配时,给目标串加上一个字符,再次进行搜索,依此类推,直到在目标串上匹配成 功,或整个目标串都被搜索但仍然没有完成匹配。    Possessive quantifier: 直接对整个目标串进行匹配,要么匹配上,要么匹配失败,它只进行一次匹配。    那么如何判断这三种不同的quantifiers呢?主要就是根据问号(?)星号(*)和加号(+)的组合来判断的,如下表所示。500)this.width=500'>    需要注意的是,possessive quantifier在目前主流的浏览器中都不被支持,IE和Opera在碰到possessive quantifier时将会抛出异常,Mozilla虽然不会发生错误,但会将它作为greedy quantifier来对待。


阅读全文(2871) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144775909 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号