当前位置:Web前端 > javascript> 正文

js RegExp用法

时间:2014-11-13类别:Web前端

js RegExp用法

js RegExp用法

一、RegExp的定义

 

1、显式构造函数

new RegExp(pattern, attributes);

参数

参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。

参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。如果 pattern 是正则表达式,而不是字符串,则必须省略该参数。

 

 attributes属性值 描述
i 执行对大小写不敏感的匹配。
g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m 执行多行匹配。

返回值

一个新的 RegExp 对象,具有指定的模式和标志。如果参数 pattern 是正则表达式而不是字符串,那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新的 RegExp 对象。

如果不用 new 运算符,而将 RegExp() 作为函数调用,那么它的行为与用 new 运算符调用时一样,只是当 pattern 是正则表达式时,它只返回 pattern,而不再创建一个新的 RegExp 对象。

 

2、隐式构造函数(直接量语法)

/pattern/attributes

参数及意义和显式构造函数一样

 

二、RegExp 静态属性

 

index 是当前表达式模式首次匹配内容的开始位置,从0开始计数。其初始值为-1,每次成功匹配时,index属性都会随之改变。
input 返回当前所作用的字符串,可以简写为$_,初始值为空字符串""。
lastIndex 是当前表达式模式首次匹配内容中最后一个字符的下一个位置,从0开始计数,常被作为继续搜索时的起始位置,初始值为-1,表示从起始位置开始搜索,每次成功匹配时,lastIndex属性值都会随之改变。
lastMatch 是当前表达式模式的最后一个匹配字符串,可以简写为$&。其初始值为空字符串""。在每次成功匹配时,lastMatch属性值都会随之改变。
lastParen 如果表达式模式中有括起来的子匹配,是当前表达式模式中最后的子匹配所匹配到的子字符串,可以简写为$+。其初始值为空字符串""。每次成功匹配时,lastParen属性值都会随之改变。
leftContext 是当前表达式模式最后一个匹配字符串左边的所有内容,可以简写为$`(其中“'”为键盘上“Esc”下边的反单引号)。初始值为空字符串""。每次成功匹配时,其属性值都会随之改变。
$1…$9 这些属性是只读的。如果表达式模式中有括起来的子匹配,$1…$9属性值分别是第1个到第9个子匹配所捕获到的内容。 如果有超过9个以上的子匹配,$1…$9属性分别对应最后的9个子匹配。在一个表达式模式中,可以指定任意多个带括号的子匹配, 但RegExp对象只能存储最后的9个子匹配的结果。在RegExp实例对象的一些方法所返回的结果数组中,可以获得所有圆括号内的子匹配结果。

 

三、RegExp实例属性

 

global 返回创建RegExp对象实例时指定的global标志(g)的状态。如果创建RegExp对象实例时设置了g标志,该属性返回True,否则返回False,默认值为False。
ignoreCase 返回创建RegExp对象实例时指定的ignoreCase标志(i)的状态。如果创建RegExp对象实例时设置了i标志,该属性返回True,否则返回False,默认值为False。
multiLine 返回创建RegExp对象实例时指定的multiLine标志(m)的状态。如果创建RegExp对象实例时设置了m标志,该属性返回True,否则返回False,默认值为False。
source 返回创建RegExp对象实例时指定的表达式文本字符串。

 

四、RegExp实例方法

 

exec 语法格式为exec(str)。该方法使用创建RegExp对象实例时所指定的表达式模式对一个字符串进行搜索,并返回一个包含搜索结果的数组。
如果为正则表达式设置了全局标志(g),可以通过多次调用exec和test方法在字符串中进行连续搜索,每次都是从RegExp对象的lastIndex属性值指定的位置开始搜索字符串。
如果没有设置全局标志(g),则exec和test方法忽略RegExp对象的lastIndex属性值,从字符串的起始位置开始搜索。 如果exec方法没有找到匹配,返回值为null;如果找到匹配,则返回一个数组,并更新RegExp对象中有关静态属性以反映匹配情况。 返回数组中的元素0包含了完整的匹配结果,而元素1~n依次是表达式模式中定义的各个子匹配的结果。
test 语法格式为test(str)。该方法检查一个字符串中是否存在创建RegExp对象实例时所指定的表达式模式,如果存在就返回True,否则返回False。 如果找到匹配项,则会更新RegExp对象中的有关静态属性,以反映匹配情况。
compile 语法格式为compile("pattern"[,"flags"])。该方法可以更换RegExp对象实例所使用的表达式模式,并将新的表达式模式编译为内部格式,从而使以后的匹配过程执行更快。

 

五、RegExp几个常用方法说明

 

1、Test()

RegExpObject.test(string)

判断string中是否有与表达式匹配的字符串,有则返回true,否则返回false

例如

var patt1=new RegExp("e");    

document.write(patt1.test("The best things in life are free"));   

由于该字符串中存在字母 "e",以上代码的输出将是:true

 

2、exec()

RegExpObject.exec(string)

exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。

例如

  •  
  • JScript 代码   复制
  • 
    var str= "cat2,hat8" ;
    var reg=/c(at)\\d/ ;  有分组
    console.info(reg.exec(str));//运行返回   ["cat2", "at"]
    
    		
  •  

    3、Match()

    string.match(RegExpObject)

    它和exec有类似,也是返回一个数组,但它们有区别。

    区别1:如下如果正则中有g,则match返回所有匹配。而exec永远只返回与第一个匹配有关的信息。

    区别2:如果没有g,但是有分组,则两个结果一样。或者没有g也没有分组。只返回第一个匹配。

    实例

  •  
  • JScript 代码   复制
  • 
    var someText= "web2.0 .net2.0" ;
    var pattern=/(\\w+)(\\d)\\.(\\d)/g;
    var outCome_exec=pattern.exec(someText); ["web2.0","web","2","0"]
    var outCome_matc=someText.match(pattern); ["web2.0","net2.0"]
    
    		
  •  

    4、Search()

    stringObject.search(regexp)

    返回第一个匹配的起始位置。

     

    5、Replace()

    stringObject.replace(regexp/substr,replacement)

    返回新替换过后的新字符串。

    如果是字符串,替换第一个。如果是正则表达式中有g,则全部替换,否则也是一个。

    例如

  •  
  • JScript 代码   复制
  • 
    function fn() { 
    for(var i = 0;i < arguments.length;i++){
    alert(""+(i+1)+"个参数的值:"+arguments[i]);
    } 
    } 
    var str = '<li id="{wo}" >{ni}</li>'; 
    str.replace(/\\{([a-z]+)\\}/ig, fn); 
    
    		
  •  

    6、Split()

    stringObject.split(separator,howmany)

    第一个参数是字符串或者正则表达式,从它开始分解字符串。第二个参数表示返回数组的最大长度。 

    例如

  •  
  • JScript 代码   复制
  • 
    var str= "cat2,hat8" ;
    var reg=/at/ ;
    console.info(str.split(reg));
    ["c", "2,h", "8"]
    console.info(str.split(reg,2));
    ["c", "2,h"]
    
    		
  •  

    7、compile()

    compile() 方法用于改变 RegExp。

    compile() 既可以改变检索模式,也可以添加或删除第二个参数。

    例如

  •  
  • JScript 代码   复制
  • 
    var patt1=new RegExp("e");   
      
    document.write(patt1.test("The best things in life are free"));   
      
    patt1.compile("d");   
      
    document.write(patt1.test("The best things in life are free")); 
    
    		
  •  

    8、关于$0~$99的例子

  •  
  • JScript 代码   复制
  • 
    var str="alert.login.verifyfailed=Your email or password is incorrect!";
    var reg=/^alert.\\w*(.\\w*)=((?:\\w*[ !\\.])*)$/;
    var out=str.match(reg);
    console.info($0);
    
    		
  •  

    9、测试RegExp属性

  •  
  • JScript 代码   复制
  • 
    function demo(){
        var str = "abcdd abcsszabcdddccabAbcddABCEE";
        var regex = /a(bc)/gi;
        var t = null;
        while(t = regex.exec(str)){
            var result = "index = " + t.index + ", match = " + t[0] + ", group = " + t[1];
            result += "/n$1=" + RegExp.$1 + ", lastMatch=" + RegExp.lastMatch + ", leftContext=" + RegExp.leftContext;
            alert(result);
        }
    }
    
    		
  •  

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐