正则表达式的相关笔记

标记g为全局模式,i为不区分大小写模式,m为多行模式。

exec()方法

用于检测字符串中的正则表达式的匹配,用法:RegExpObject.exec(string);

string是被检测的字符串。exec的返回值是一个数组,其中存放匹配的结果,如果没有找到匹配的值,则返回null。返回的数组的第0个元素师与正则表达式相匹配的文本,第1个元素师与RegExpObject的第1个字表达式相匹配的文本,以此类推。

RegExpObject有一个lastIndex属性,表示在指定的字符处开始检索字符串string。当RegExpObject是一个全局的正则表达式时,exec()的在每次返回一个匹配值时,查询的开始位置就变成匹配文本的最后一个字符的下一个位置,就是说,可以通过反复调用exec()方法来遍历字符串中所有匹配的文本。看下面的事例代码:

js部分:

<script type="text/javascript">
<!--
function test1(){
    var mycon=document.getElementById("content").value;
    var myRegExp=/(\d){4}/g;
    while(res=myRegExp.exec(mycon)){
        alert("找到"+res[0]);
    }
}
//-->
</script>
html部分:
<body>
  <textarea id="content" rows="10" cols="20"></textarea>
  <input type="button" onclick="test1()" value="测试"/>
</body>

本例中正式由于myRegExp=/(\d){4}/g;是全局的,所以每次执行myRegExp.exec(mycon)时起始的位置不同,所以才能遍历字符串中所有的匹配文本,如果正则表达式变成myRegExp=/(\d){4}/;此时就只能找出第一个匹配的值了。

 

支持正则表达式的string

对象方法

1.search()方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。

stringObject.search(regexp);

返回值是stringObject中第一个与regexp相匹配的子串的起始位置,如果没有找到任何匹配的子串,则返回-1。

2.match()方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

stringObject.match(searchvalue)    stringObject.match(regexp)

返回值为存放匹配结果的数组。

当正则表达式不具有全局g标志时,该方法只能在stringObject中执行一次匹配,如果没找到就返回null,否则返回的第0个元素就是匹配文本,其余的元素存放的是与正则表达式的子表达式匹配的文本。此时,返回的数组还有两个对象属性,index属性声明的是匹配文本的起始字符在stringObject中的位置,input属性声明的是对stringObject的引用。如果regexp具有标志g时,则match()方法将执行全局检索,没有找到将返回null,如果找到一个或多个匹配子串,则返回一个数组,存放的是所有匹配的子串,此时也没有index属性和input属性。

 3.replace()方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

stringObject.replace(regexp,replacement)

返回值是一个新的字符串,使用replacement替换了regexp的第一次匹配或所有匹配之后得到的。

示例代码:

js部分:

<script type="text/javascript">
<!--
function test2(){
    var mycon=document.getElementById("content").value;
  var newCon=mycon.replace(/(\d){4}/g,"这里原来是连续的四个数字");
    document.getElementById("content").value=newCon;
}
//-->
</script>
html部分:
<body>
  <textarea id="content" rows="10" cols="20"></textarea>
  <input type="button" onclick="test2()" value="测试"/>
</body>

4.split()

RegExp的静态属性

1.index  是当前表达式模式首次匹配内容的开始位置,从0开始计数。每次成功匹配时,index属性都会随之改变。

2.lastindex是当前表达式模式首次匹配内容中最后一个字符的下一个位置,从0开始计数。

3.input 返回当前所作用的字符串。

4.leftContext是当前表达式模式最后一个匹配字符串左边的所有内容。

5.rightContext是当前表达式模式最后一个匹配字符串右边的所有内容。

示例代码:

function test3(){
    var mycon=document.getElementById("content").value;
    //alert(mycon);
    var myRegExp=/(\d){4}/g;
    while(res=myRegExp.exec(mycon)){
        alert("index="+RegExp.index+" left="+RegExp.leftContext+" right="+RegExp.rightContext);
    }
}

子表达式 捕获 反向引用

例子:给你一个字符串,请找出所有四个数字连在一起的子串,并且这四个数字要满足1.第一位与第四位相同,第二位与第三位相同。

function test4(){
    var mycon=document.getElementById("content").value;
   var myRegExp=/(\d)(\d)\2\1/gi;
    while(res=myRegExp.exec(mycon)){
        alert(res[0]);
    }
}

(\d)就是子表达式,\2是反向引用捕获到的第二个子表达式,\1是反向引用捕获到的第一个子表达式。

例子:请在字符串中检索商品编号,形式如:12345-333999111这样的号码,要求满足前面是一个五位数,然后一个-号,然后是一个九位数,连续的每三位要相同。

function test5(){
    var mycon=document.getElementById("content").value;
   var myRegExp=/(\d){5}-(\d)\2\2(\d)\3\3(\d)\4\4/gi;
    while(res=myRegExp.exec(mycon)){
        alert(res[0]);
    }
}

元字符

元字符从功能上大致分为:

1.限定符 用于指定其前面的字符和组合项连续出现多少次,{n},n表示出现的次数,如(\d){2}。{n,m}表示至少出现n次,最多出现m次(贪婪匹配)。+表示出现一次到任意多次,如/a+/gi。*表示出现0次或者任意多次,如/a*/gi。?表示出现0次或者1次,如/a?/gi。去vagaa.com

2.选择匹配符 就是既可以匹配这个,又可以匹配那个,这个时候需要用到选择匹配符 | 。如/(han|韩)/gi。

3.分组组合和反向引用符

4.特殊字符

5.字符匹配符 [a-z]表示可以匹配a-z中任意一个字符,如/[a-z]{2}/gi,/[0-9][11]/gi。

[^a-z]表示可以匹配不是a-z中的任意一个字符。[abcd]表示可以匹配abcd中的任意一个字符,[^abcd]表示可以匹配不是abcd中的任意一个字符。

\d相当于[0-9];\D相当于[^0-9];\w相当于[a-zA-Z0-9_];\W相当于[^a-zA-Z0-9_];\s匹配任何空白字符(空格,制表符等);\S匹配任何非空白字符;.匹配出\n之外的所有字符,如果需要匹配.本身,则需要使用\.;

6.定位符 用于规定要匹配的字符串出现的位置,比如在字符串的开始还是在结束的位置。

^匹配目标字符串的开始位置,如/^abc/gi,$匹配目标字符串的结束位置,如/abc$/gi。

\b匹配目标字符串的边界。如用/han\b/gi去匹配“hanshunping sphan nnhan”,我们会匹配到“hanshunping sphan nnhan”,\B匹配目标字符串的非边界。如用/han\B/gi去匹配“hanshunping sphan nnhan”,我们会匹配到“hanshunping sphan nnhan”。

转义符号\

需要用到转义符号的字符有:. * + ( ) $ / \ ? [ ] ^ { }

posted @ 2013-09-23 12:50  卡可美  阅读(253)  评论(0)    收藏  举报