学习笔记——JavaScript中的正则表达式

来源:互联网 发布:未知usb设备 端口重置 编辑:程序博客网 时间:2024/05/16 16:01
在JavaScript中,正则表达式是通过RegExp对象使用的。RegExp对象是JavaScript中的一个内置对象。
可以通过两种方式创建新的RegExp对象:
    
var myRegExp= /\b'|'\b/;//斜杠(/)表示正则表达式的开始和结束var myRegExp=new RegExp("\\b'|'\\b");


在用构造函数创建RegExp时,注意,在字符串中,反斜杠表示一个转义字符。例如\b代表退格。因此,
在字符串中为了区分,需要加两个斜杠,如上所示
另外,RegExp的三个属性值在采用构造函数时的指定方法如下:
    
var myRegExp=new RegExp("hello\\b","gi");






简单的正则表达式:
    
var myString="Paul,Paula,Pauline,paul,Paul";var myRegExp=/Paul/;myString=myString.replace(myRegExp,"Ringo");//此时myString为:Ringo,Paula,Pauline,paul,Paul




RegExp的三个属性:
    g:全局匹配,查找所有与模式匹配的子串,而不是在找到第一个匹配的子串后就结束
    i:模式不区分大小写。
    m:多行标记,只能用于IE 5.5+和NN 6+,该标记指定,特殊字符^和$可以匹配多行文本和字符串
        的开始和结束
    实例:
       
        var myString="Paul,Paula,Pauline,paul,Paul";        var myRegExp=/Paul/g;        myString=myString.replace(myRegExp,"Ringo");        //此时myString的值为:Ringo,Ringo,Ringoine,paul,Ringo        var myRegExp=/Paul/gi;        myString=myString.replace(myRegExp,"Ringo");        //此时myString的值为:Ringo,Ringo,Ringoine,Ringo,Ringo




特殊字符——文本、数字和标点符号:
    \d      0~9 的任何数字                               \d\d匹配72,但不匹配7a或aa
    \D      任何非数字字符                               \D\D匹配ab,但是不匹配13或8f
    \w      任何单词字符【A~Z、a~z、0~9、下划线(_)】     \w\w\w匹配A_2,不匹配A@a或者&%$
    \W      任何非单词字符                               \W匹配@,但是不匹配a
    \s      任何空白字符                                 \s与制表符、回车符、换页符、竖杠匹配
    \S      任何非空白字符                               \S匹配A,但是不匹配制表符
    .       除换行符(\n)之外任意单个字符                 .匹配a或者4,或者@
    […]     匹配位于方括号之内的任一个字符               [a-z]匹配a~z所有字符
    [^…]    匹配除方括号内的字符之外的任何字符           [^a-z]匹配除了a~z之外任何字符


特殊字符——重复字符
    {n}     前一项出现n次                         x{2}与xx匹配
    {n,}    前一项出现n次,或者n次以上            x{2,}匹配xx、xxx、xxxx、xxxxx等等
    {n,m}   前一项至少出现n次,至多出现m次        x{2,4}匹配xx、xxx、xxxx
    ?       前一项出现0次或1次                    x?匹配空串或者x
    +       前一项出现1次或多次                   x+匹配x、xx、xxx、xxxx、xxxxx等
    *       前一项出现0次或多次                   x*匹配空串、x、xx、xxx、xxxx等等


特殊字符——位置字符
    ^       模式必须位于字符串的开头,如果是多行字符串,模式就位于一行的开头。对于多行文本
            (即包含回车符的字符串),在定义正则表达式时,要使用m
    $       模式必须位于字符串的借书位置,如果是多行字符串,模式就位于一行的结束位置。对于
            多行文本(即包含回车符的字符串),在定义正则表达式时,要使用m
    \b      匹配单词分界位置,即单词字符与非单词字符之间的位置
    \B      匹配非单词分界位置


    实例:
        如果要确保模式位于一行的开头,可用:^myPattern,这将与一行开头的myPattern匹配
        如果要在一行的结尾匹配该模式,可用:myPattern$
        对于\b与\B,它们容易混淆,因为它们不匹配字符,而是匹配字符之间的位置
            
            var myString="Hello world!,let's go";            var myRegExp=/\b/g;            myString=myString.replace(myRegExp,"|");            //此后,myString值为:|Hello| |world|!,|let|'|s| |go|            var myRegExp=/\B/g;            myString=myString.replace(myRegExp,"|");            //此后,myString值为:H|e|l|l|o w|o|r|l|d!,l|e|t's g|o




正则表达式的分组
    如果要把多个表达式处理为一个组,只需将它们放在圆括号中,如/(\d\d)/
    正则表达式中的圆括号是把字符模式组合在一起的特殊字符,圆括号本身不是要匹配的字符
    实例:
        /Javascript+/;      //这个表示t出现1次或者多次
        /(Javascript)+/;    //这个表示Javascript字符串出现1次或者多次
    在分组中还可以配合使用分组和特殊字符竖杠(|)。|是二选一字符,与C语言中的||作用一样
    实例:
        
/(VB)?(Java)Script\b/gi;//这个不仅匹配VBScript和JavaScript,还匹配VBJavaScript/(VB|Java)Script\b/gi;//这个只是匹配VBScript和JavaScript




重用字符组
    可以在正则表达式中重用通过一组字符指定的模式。要引用前面的字符组,只需输入\和表示
    分组顺序的数字即可。例如,第一个字符分组可引用为\1,第3个可以为\3
    实例:
        /(\d)(\w),\1\2/;//这个匹配形如:1a,4d类型的字符串




使用正则表达式验证电话号码、邮政编码、电子邮件的方法:
    
    function isValidTeliphone(telephoneNumber)    {        var telRegExp=/^(\+\d{1,3} ?)?(\(\d{1,5}\)|\d{1,5}) ?\d{3}?\d{0,7}( (x|xtn|ext|extn|pax|pbx|extension)?\.? ?\d{2-5})?$/i;        return telRegExp.test(telephoneNumber);    }    function isValidPostalCode(postalCode)    {        var pcodeRegExp=/^(\d{5}(-\d{4})?|([a-z][a-z]?\d\d?|[a-z{2}\d[a-z])?\d[a-z][a-z])$/i;        return pcodeRegExp.test(postalCode);    }    function isValidEmail(emailAddress)    {        var emailRegExp=/^(([^<>()\[\]\\.,;:@"\x00-\x20\x7F]|\\.)+|("" "([^\x0A\x0D"\\]|\\\\)+" ""))@(([a-z]|#\d+?)([a-z0-9-]|#\d+?)*([a-z0-9]|#\d+?)\.)+([a-z]{2,4})$/i;        return emailRegExp.test(emailAddress);    }

实例:简单的正则表达式测试器