JavaScript 正则表达式详解

一、创建:
                var pattern = /s$/;
                var pattern2 = new RegExp("s$");

                注意:转义 /\\/ 匹配任何包含反斜线的字符串

二、语法
                1).直接量字符
                    字符               匹配
                    字母和数字字符     自身
                    \n                   换行符
                2).字符类
                    字符                 匹配
                    [ ]                    方括号内的任意字符
                    [^  ]                不再方括号内的任意字符
                    \w                    任何ASCII字符组成的单词 等价于[^a-zA-Z0-9]
                    \w                     和上面相反
                    \s                     任何Unicode空白符
                    \S                     不是空白符
                    \d                     任何SSCII数字 等价于[0-9]
                    \D                     上面相反
                3).重复次数
                    {n,m}                 匹配前一项至少n次,但不能超过m次  >=n  <m
                    {n,}                匹配前一项 >= n;
                    {n}                    匹配前一项 =n
                    ?                     匹配前一项0次或1次,等价于{0,1}
                    +                    匹配前一项至少出现1次 等价于{1,}
                    *                     匹配前一项0次或多次 {0,}
                4).非贪婪的重复
                    在待匹配字符后跟随一个问好即可: ?? +? *? {1,5}?
                    例如:
                        /a+b/ 匹配一个或多个a 以及一个b
                        aaab 会匹配整个字符串
                        非贪婪版本 /a+?b/ 会尽量少的a和一个b
                        aaab
                5).选择,分组,引用
                    选择 用|
                        例如/\d{3}|[a-z]{4}}/ 匹配3个数字或4个小写字母
                    ()作用
                        1./java(script)?/ 匹配字符串java 其后可以有script 亦可以没有
                        2.子模式
                        3.允许同一正则表达式的后部应用前面的子表达式 这是通过在字符\ 后加1位或多位数字来实现的。
                        这个数字指定了带圆括号的子表达在正则表达式中的位置
                            例如:\1 引用的是第一个带圆括号的子表达实
                            例如:/([Jj]ava([Ss]cript)?)\si\s(fun\w*)/
                                \2 表示子表达式 ([Ss]script)
                    分组:
                        (?:  )
                        /([Jj]ava(?:[Ss]cript)?)\sis\s(fun\w*)/

                        子表达式(?:[Ss]cript) 仅仅用域分组 不生成引用 所以\2匹配的是 (fun\w*)

                    字符              含义
                    |                选择,匹配左边或右边
                    (  )            组合,将及个项组合成一个单元  生成引用(\数字 )
                    (?:  )            只组合 不引用
                    \n                 和地n个分组第一次匹配的字符相匹配
                6).指定匹配位置
                    字符            含义
                    ^                 匹配字符串的开头
                    $                 匹配字符串的结尾
                    \b                 匹配一个单词的边界
                    \B                 匹配非单词边界的位置
                    (?=p)             零宽正向先行断言 要求接下来的字符都与p匹配
                    (?!p)             领宽负先行断言,要求接下来的字符不与p匹配
                7).修饰符
                    修饰符是放在/符号之外的
                    字符             含义
                    i                  执行不区分大小写的匹配
                    g                 执行一个全局匹配
                    m                 多行匹配模式
   三、使用方法
            1.字符串支持4中使用正则表达式的方法
                1).search(/正则表达式/) 返回第一个与之匹配的字符串的其实位置,若找不到,返回-1
        
                    "JavaScript".search(/script/i);   //返回4

                    注意: search()方法不支持全局检索 所以会忽略正则表达式中的修饰符g
                2).replace() 执行检索与替换
                    用法一:str.replace(/正则表达式/,"替换字符串")  
                            a.如果正则表达式不带g ,只会替换所匹配的第一个子串
                            b.如果带g ,替换所有结果
                             例如:
                             text.replace(/javascript/ig,"JavaScript");

                    用法二:str.replace('字符串') 将直接检索这个字符串
                    用法三:str.replace(/正则表达式/,函数)
                3).match(/正则表达式/)  返回匹配结果组成的数组    反之null

                    例如:"1 plus 2 equals 3".match(/\d+/g)
                    返回 ["1","2","3"]

                    注意:如果正则表达式没设置修饰符g match() 方法就不会进行全局检索 它只检索第一个匹配,但即使match()执行的不是全局检索,他也返回一个数组。
                    第一个元素 是完整的匹配的字符串 ,余下的就是正则表达式中用括号括起来的子表达。
                    例如:
                    var pat = /(\w+):\/\/([\w.]+)\/(\S*)/
                    var res = "http://www.baidu.com/~david".match(pat);
                    
                    res[0] = "http://www.baidu.com/~david";
                    res[1] = "http"
                    res[2] = "www.baidu.com"
                    res[3] = "~david"

                4).split() 方法 将字符串分割成数组  参数除了指定分隔符外也可以是个正则表达式
                    例如:
                    "1,  2, 23,  5 ".split(/\s*,\s/); 可匹配逗号两边任意多的空白符
                    结果:["1","2","23",5]
            2.RegExp对象的使用方法
                RegExt("正则表达式",修饰符);

                注意 :正则表达式中的 \ 换成 \\

                例如:zipcode = new RegExp("\\d{5}","g");

                全局匹配字符串中的5个数字
            
                方法:
                    1).正则表达式.exec("字符串")  //找到返回数组,反之NULL
                    2).正则表达式.test("字符串")  //返回匹配结果true 或 false

 

博主会后续继续更新js的内容,欢迎留言评论。如需转载,请先联系博主。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值