您的位置:首页 > Web前端 > JavaScript

javascript RegExp正则的学习心得

2010-06-19 15:03 323 查看
最近经常遇到JavaScript的正则表达式,但是每次都要去google,今天抽时间学习了下JavaScript帮助文档(我已经上传到共享资源中)的正则表达式篇,先把自己的学习心得跟大家分享下。下一篇文章主要学习正则的语法和常用方法使用。
一、正则表达式定义
(1)正则表达式,初步理解就是相当于我们在计算机上搜索文件的时候,使用“*”号代替多个字符,使用“?”号代替一个字符的道理差不多,但是正则要比我们 计算机搜索文件时复杂的多。我们来认识下正则表达式对象。正则表达式的创建方法:
1.当我们预先知道要查找的字符串的时候,用语法1
语法1 re = /pattern/[flags]
如:var aRegExp = /cle/ig; //忽略大小写,匹配字符串中是否出现“cle”

2.当我们要对用户输入的字符串进行查找的时候,用语法2:
语法1 re = /pattern/[flags]
如:var aRegExp = new RegExp("cle","ig"); //忽略大小写,匹配字符串中是否出现“cle”
(2)RegExp对象的理解
通过RegExp对象,我们可以通过new关键字定义一个正则表达式对象,但是我们不要理解RegExp就是正则表达式对象。RegExp是JavaScript引擎内置的一个对象,可以用来定义正则表达式,就像String对象一样。但是我们不要忘记一个RegExp的一个重要特性,RegExp是全局对象,他会存储我们用正则表达式最近匹配的9个结果。当我们想引用这9个结果的时候,可以使用$1-$9来引用,比如想使用第一个匹配结果,可以使用RegExp.$1,$0默认是存储模式字符串。另外全局属性:
RegExp.index:返回字符串中第一个成功匹配的位置,只读
RegExp.input:返回执行规范表述查找的字符串。只读。
RegExp.lastIndex:返回字符位置,它是被查找字符串中下一次成功匹配的开始位置。
RegExp.lastMatch:返回任何正则表达式搜索过程中的最后匹配的字符。只读。
RegExp.lastParen:如果有的话,返回任何正则表达式查找过程中最后括的子匹配。只读。
RegExp.leftContext:返回被查找的字符串中从字符串开始位置到最后匹配之前的位置之间的字符。只读
RegExp.rightContext:回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符。只读。

(3)RegExp的属性示例
3.1 $0-$9测试
function matchDemo(){
var s;
var re = new RegExp("d(b+)(d*)","ig"); //编译后:/d(b+)(d*)/ig
var str = "cdbBdbsbdbdz";
var arr = re.exec(str); //arr值:arr[0]=“dbBd” arr[1]="bB" arr[2]="d" arr.index=1 arr.input="cdbBdbsbdbdz" arr.lastIndex=5
s = "$1 contains: " + RegExp.$1 + "/n"; //RegExp.$1="bB"
s += "$2 contains: " + RegExp.$2 + "/n"; //RegExp.$2="d"
s += "$3 contains: " + RegExp.$3; //RegExp.$3=null
return(s);
}

3.2下例阐明了 index 属性的用法。该函数重复了字符串查找,并将字符串中每一个字的 index 和 lastIndex 值都打印出来。
function RegExpTest(){
var ver = 6;
if (ver >= 5.5){
var src = "The rain in Spain falls mainly in the plain.";
var re = //w+/g; //pattern等价于 [A-Za-z0-9_]
var arr;
while ((arr = re.exec(src)) != null)
alert(arr.index + "-" + arr.lastIndex + "/t" + arr); //第一次打印“0-3 The”,第二次“4-8 rain”,其他自己预测下,嘎嘎
}
else{
alert("You need a newer version of JScript for this to work");
}
}

3.3任何时候改变了被查找的字符串,input 属性的值都会被修改。
function inputDemo(){
var s;
var re = new RegExp("d(b+)(d)","ig");
var str = "cdbBdbsbdbdz";
var arr = re.exec(str);
s = "第一个:" + RegExp.input; // RegExp.input=“cdbBdbsbdbdz”

//再次正则下,查找RegExp.input的变化
var anohterRe= new RegExp("he(l+)","ig");
var anotherStr = "hello world";
var anotherResult = anohterRe.exec(anotherStr);

s+= "/n 第二个:" + RegExp.input; // RegExp.input=“hello world” ,必须有模式串中的字符,RegExp.input值才会变化,不然不会变化
return s;
}

3.4 lastMatch 属性的初始值是一个空字符串。只要找到了匹配的字符,lastMatch 属性的值就会相应改变。
lastParen 配模式中最后被括号括住的子字符串模式匹配的字符串,初始值为空字符串
leftContext 回被查找的字符串中从字符串开始位置到最后匹配开始之前的位置之间的字符
rightContext 返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符。只读
function matchDemo(){
var s; //声明变量。
var re = new RegExp("d(b+)(d)","ig"); //正则表达式样式。
var str = "cdbBdbsbdbdz"; //要被查找的字符串。
var arr = re.exec(str); //进行查找。
s = "$1 returns: " + RegExp.$1 + "/n"; // bB
s += "$2 returns: " + RegExp.$2 + "/n"; //d
s += "$3 returns: " + RegExp.$3 + "/n"; //""
s += "input returns : " + RegExp.input + "/n"; //cdbBdbsbdbdz
s += "lastMatch returns: " + RegExp.lastMatch + "/n"; // dbBd
s += "leftContext returns: " + RegExp.leftContext + "/n"; //c
s += "rightContext returns: " + RegExp.rightContext + "/n"; //bsbdbdz
s += "lastParen returns: " + RegExp.lastParen + "/n"; //d
return(s); //返回结果。
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: