分享

Javascript正则表达式使用

 Go_Ahead 2012-01-29

1、  什么时候使用正则表达式?

      在制作网站的过程中,我们可能需要搜索某个字符串是否含有某种字符子串,也可能需要检验某个字符串是否符合某种格式。这里的字符子串和某种格式,就可以用正则表达式来表示。

2、  如何使用正则表达式

       Javascript中的String对象提供了四种可利用正则表达式的方法。假如你定义了一个字符串s,还定义了一个正则表达式p。(以下是对方法的简要介绍)

      a) 你想看s中是否包含了与p匹配的字符串,并且想知道匹配上的那个串在s中的位置。可以用s.search(p);若找不到,它会返回-1

      b) 你想看s中与p匹配的字符串的具体内容,可以用s.match(p);它将返回一个数组。

      c) 你想将s中与p匹配的字符串替换成其它字符串,可以用sreplace(p,”anotherstring”);第二个参数可以是字符串,当然也可以正则表达式。

      d) s.split(p);它会将s分成一个子串数组,使用的分隔符就是p

另外,正则表达式对象也提供了两个很好用的方法。

      p.test(s);检查s中是否有与p匹配的字符串,有则返回true,否则返回false

      p.exce(s);它将返回s中与p匹配的字符串的具体内容,它也返回一个数组。

3、  正则表达式的定义

      在JS中有两种方式:var pattern = new RegExp(“java”) var pattern = /java/。用两个斜杠包起来的称为正则表达式直接量。在上面列举的方法中参数部分可以是定义好的p,也可以是正则表达式直接量。两种方式是完全等价的,第一种方式在需要动态构建正则表达式时很有用,譬如需要根据用户输入来构建正则表达式。

4、  正则表达式的组成
我想按照需求来一点点深入。

      a.  我们要查找一个简单的已知的字符串,如a,则写成/a/

      b.  如要我们想找a或者b或者c呢?可以写成/[abc]/,也可以用|表示或者的意思,如/ab|cd/表示匹配ab或者cd。可以用短线连接表示范围,如/[a-z]/表示小写字母,/[a-zA-Z]/表示所有字母。另外/[^abc]/匹配的是除’a’,’b’,’c’之外的所有字符。常用的范围也有简短的写法:/w等价于[a-zA-Z0-9_]即匹配所有字母、数字、下划线。/W等价于[^a-zA-Z0-9_],即除字母和数字和下划线之外的所有字符。/d等价于[0-9]/D等价于[^0-9]

      c.  如果要查找一些不是字符的符号,如回车换行,要怎么写呢?正则表达式已规定了相关写法如下:

            /o匹配NUL字符

            /v匹配 垂直制表符

            /f匹配 换页符

            /t 匹配 Tab(制表符

            /n 匹配 newline(换行

            /r 匹配回车 

            /s 匹配空字符 

            /b 匹配字(word)边界,比如 //bjavascript/b/ 匹配的字符串里,必须含有javascript,而且它的两边不能是/w所表示的字符,类似 123javascript22的字符串无法与之匹配,注意,字边界中字是由数字,字母或下划线组成。 

/B 匹配非字边界 

            [/b]匹配退格

 

d.  我们想找两个连着的数字,是不是写成//d/d/?其实有更好的方法,以下方式可表示重复。

            *,匹配前一项0次或多次

            +,匹配前一项1次或多次

            ,匹配前一项0次或1

            {n,m},匹配前一项至少n次,但不能超过m次。

            {n,},匹配前一项大于等于n

            {n},匹配前一项恰好n

      例如:

            /a*/ 匹配0个或多个a

            //d{2,4}/匹配数字至少2次但不多于4

            /[^”]+/匹配非引号的字符1次或多次

e. 我们已看到*+,?号等有特殊的含义了,那如果我就是想匹配“a*“这个字符串,要如何写呢?加反斜杠转义即可。即可以写成/a/*/ 。下列的符号如果出现在正则表达式中,都需要转义:^ $  * + ? = ! : | / / ( ) [ ] { }。如果记不清哪些符号需要转义,可以在正则表达式中出现的所有不需要特殊含义的符号前加上转义符,因为没有特殊含义的那些符号(如引号和@)即使加了转义符也不会有影响,跟没加是一样的。

f. 有时候我们需要确定字符串是否以指定字符串开头或结尾。例如/^java/ /script$/,分别匹配以java开头和以script结尾的字符串,在多行检索中(下面会介绍),匹配一行的开头和结尾。

g.最后再说一下标志。它是紧跟在第二个/之后的一种说明标志。例:

            /hello/i 不区分大小写,即它可以匹配HelloHEllohello等等

            /hello/g 表示全局匹配。不加这个标志的话,match函数只找到第一个匹配的字符串就会返回,加上后就会反全文中的匹配结果都找出来。这个标志不影响searchtest函数,他们无论如何都会找到一个匹配就返回。

            /hello/m 表示多行匹配。如果hello这个串中间有回车,即hello分布在两行,加了m后就可匹配到。

            标志可以一起使用。如/hello/ig/hello/im

       另外,正则表达式中可以使用小括号。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多