JavaScript 正则表达式学习

发布时间:2020-06-15编辑:脚本学堂
本文介绍了javascript中正则表达式的用法,在JavaScript中,正则表达式是通过RegExp对象使用的,RegExp对象是JavaScript中的一个内置对象,有需要的朋友参考下。

javascript正则表达式的用法,可以通过两种方式创建新的RegExp对象:
 

复制代码 代码示例:
var myRegExp= /b'|'b/;//斜杠(/)表示正则表达式的开始和结束 
var myRegExp=new RegExp("b'|'b"); 

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

复制代码 代码示例:
var myRegExp=new RegExp("hellob","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 的任何数字                               dd匹配72,但不匹配7a或aa
    D      任何非数字字符                               DD匹配ab,但是不匹配13或8f
    w      任何单词字符【A~Z、a~z、0~9、下划线(_)】     www匹配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

正则表达式的分组
    如果要把多个表达式处理为一个组,只需将它们放在圆括号中,如/(dd)/
    正则表达式中的圆括号是把字符模式组合在一起的特殊字符,圆括号本身不是要匹配的字符
    实例:
 

复制代码 代码示例:
        /Javascript+/;      //这个表示t出现1次或者多次
        /(Javascript)+/;    //这个表示Javascript字符串出现1次或者多次

    在分组中还可以配合使用分组和特殊字符竖杠(|)。|是二选一字符,与C语言中的||作用一样
    实例:
 

复制代码 代码示例:
/(VB)?(Java)Scriptb/gi;//这个不仅匹配VBScript和JavaScript,还匹配VBJavaScript 
/(VB|Java)Scriptb/gi;//这个只是匹配VBScript和JavaScript 

重用字符组
    可以在正则表达式中重用通过一组字符指定的模式。要引用前面的字符组,只需输入和表示
    分组顺序的数字即可。例如,第一个字符分组可引用为1,第3个可以为3
    实例:
 

复制代码 代码示例:
        /(d)(w),12/;//这个匹配形如: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]?dd?|[a-z{2}d[a-z])?d[a-z][a-z])$/i; 
    return pcodeRegExp.test(postalCode); 

function isValidEmail(emailAddress) 

    var emailRegExp=/^(([^<>()[].,;:@"x00-x20x7F]|.)+|("" "([^x0Ax0D"]|\)+" ""))@(([a-z]|#d+?)([a-z0-9-]|#d+?)*([a-z0-9]|#d+?).)+([a-z]{2,4})$/i; 
    return emailRegExp.test(emailAddress); 

例子,简单的正则表达式测试器
 

复制代码 代码示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> 
    <title>Regular Expression Tester-www.jb200.com</title> 
    <style type="text/css"> 
        body,td,th 
        { 
            font-family:Arial,Helvetica,sans-serif; 
        } 
    </style> 
    <script type="text/javascript"> 
        function getRegExpFlags() 
        { 
            var regExpFlags=''; 
            if(document.form1.chkGlobal.checked
                regExpFlags='g'; 
            if(document.form1.chkCaseInsensitive.checked) 
                regExpFlags +='i'; 
            if(document.form1.chkMultiLine.checked) 
                regExpFlags +='m'; 
            return regExpFlags; 
        } 
        function doTest() 
        { 
            var testRegExp=new RegExp(document.form1.txtRegularExpression.value,getRegExpFlags()); 
            if(testRegExp.test(document.form1.txtTestString.value)) 
                document.form1.txtTestResult.value="Match Found! "; 
            else 
                document.form1.txtTestResult.value="Match Not Found"; 
        } 
        function findMatches() 
        { 
            var testRegExp=new RegExp(document.form1.txtRegularExpression.value,getRegExpFlags()); 
            var myTestString=new String(document.form1.txtTestString.value); 
            var matchArray=myTestString.match(testRegExp); 
            document.form1.txtTestResult.value=matchArray.join('n'); 
        } 
    </script> 
</head> 
<body> 
    <form id="form1" name="form1" method="post" action=""> 
        <p> 
            Regular Expression:<br /> 
        <label> 
            <input name="txtRegularExpression" type="text" id="txtRegularExpression" size="100" value=""/> 
            <br /> 
            Global 
            <input name="chkGlobal" type="checkbox" id="chkGlobal" value="true" /> 
        </label> 
            Case Insensitive 
        <label> 
            <input name="chkCaseInsensitive" type="checkbox" id="chkCaseInsensitive" value="true"/> 
        </label> 
            Multi Line 
        <label> 
            <input name="chkMultiLine" type="checkbox" id="chkMultiLine" value="true"/> 
        </label> 
        </p> 
        <p> 
        <label> 
            Test Text:<br /> 
            <textarea  name="txtTestString" id="txtTestString" cols="100" rows="8"></textarea> 
        </label> 
        </p> 
        <p> 
            Result:<br /> 
            <textarea  name="txtTestResult" id="txtTestResult" cols="100" rows="8"></textarea>   
        </p> 
        <p> 
        <label> 
            <input type="button" name="cmdTest" id="cmdTest" value="TEST" onclick="doTest();"/> 
        </label> 
        <label> 
            <input type="button" name="cmdMatch" id="cmdMatch" value="MATCH" onclick="findMatches();"/> 
        </label> 
        <label> 
            <input type="reset" name="cmdClearForm" id="cmdClearForm" value="RESET FORM" /> 
        </label> 
        </p> 
        <p> </p> 
    </form> 
</body> 
</html>