JavaScript中的正则表达式简介

来源:互联网 发布:淘宝店铺举报链接 编辑:程序博客网 时间:2024/05/16 07:42

JavaScript正则表达式:

正则表达式的字面语法格式

一个正则表达式的格式如下: 
/由字符、字符类、特殊字符类、分组符、位置指示符、转义码、重复计量器、可选量符号组成的字符串/正则表达式标记 
如:/^(http)[1-3]{2,4}\d\w$/ig 
正则表达式标记: 
这里写图片描述

正则表达式位置指示符:规定模式在它所匹配的字符串里的位置。 
这里写图片描述

可以同时使用这两个位置指示符来确保精确的匹配给定的模式,如:/^http$/ 将只匹配http。 
转义码: 
这里写图片描述

用在正则表达式中的转义码是用在字符串中的转义码的超集(在正则表达式中有很多带特殊含义的字符如^和$等)。

正则表达式的重复计量器:指定某个字符或字符组合可以或者必须出现的次数。 
这里写图片描述

分组符”()”:在使用重复计量器时可以将字符用()组合起来作为一个项目 
如:/a(34)+c/ 匹配任何含有一个a跟随一个或者多个”34”再紧跟一个c的字符串。

字符类:

可以使用[]指定一个有效的字符集合 
如:/[123]/ 匹配任何含有1、2、3数字的字符串。

在[]中可以使用减号” - ”符指定取值范围 
如: /[0-9a-z]/ 匹配任何含有数字和小写字母的字符串

在[]中还可以使用” ^ ”来指定不能出现的字符类 
如:/[^a-zA-Z]/ 将匹配任何一个至少含有一个非字母字符的字符串

其他特殊字符类: 
这里写图片描述

子表达式:正则表达式可以用”()”分组,用于RegExp对象自身来访问子表达式成分 
如:var pattern = /(\w+) ([\d-]+)/; 
var customer = “Alan 555-2334”; 
pattern.test(customer); 
alert(“1=+RegExp.1 + “\n2=+RegExp.2); 
会显示: 
” 1=Alan2= 555-2334” 
注意:根据ECMA的规定,可以访问的子表达式不止9个,还可以用10,11……,一直达到99个之多,这主要取决于浏览器是否支持。 
可选量符号”|”:可以使用”|”来指示几个条目的逻辑“或”关系

如:/^(http|ftp|https)/ 可以匹配以” http”、” ftp”或” https”开头的字符串。 
/abc|(xyz){3}/ 匹配包含有” abc”或者” xyz xyz xyz”的字符串

一些常用正则表达式的例子:

/\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}/ 匹配如 125.0.0.2之类的ip地址 
/^(http|ftp|https):\/\/.*/ 匹配诸如 http://jdskfk之类的url地址 
/\w+@\w+.\w{1,3}/ 匹配诸如 wer@df.sdff.cn之类的email地址{1,3}表示后缀只可能是cn.,gov,com,org之类的域名后缀

RegExp对象

构造正则表达式的两种方法:

1、 var pattern=/dsfdsf/i 
2、 var pattern= new RegExp(“dsfdsf”,”i”) 
RegExp对象的方法:

1、 test(“sjdalkfjlsd”)——-返回true或者false

2、 compile(“”,””)———–用新的正则表达式替代旧的正则表达式:不常用.

3、 exec(“dsafsda”)———-返回带有很多属性的数组:包括该数组的长度length;显示输入的原始字符串input;保存第一次匹配的索引的index;以及保存第一次匹配以后接下来的搜索开始处字符所对应的索引lastIndex。(从0开始计数)。例如: 
var pattern=/cat/; 
var result=pattern.exec(“he is a big cat,a fatjdfjlkdj”); 
则result=”cat”;result.length=1;result.index=12;result.lastIndex=15; 
result.input=” he is a big cat,a fatjdfjlkdj” 
如果不能匹配,则result=null; 
如果使用了子表达式,则返回的数组元素将不止一个。 
如: 
var pattern= /(cat)(and)(dog)/ 
var result=pattern.exec(“my cat and dog are black.”) 
则 result= cat and dog,cat,and,dog 
result.length=4;result.index=3;result.lastIndex=15; 
result.input= my cat and dog are black. 
注意:exec()方法将整个匹配的字符串放到返回数组的第一个元素,lastIndex属性指向最后一个匹配的字符串的最后一个字符的下一个位置。 此外,exec()方法在执行全局匹配的时候只返回第一个匹配,所有,需要返回多个匹配的时候,最好使用后面所要介绍的String的match()方法.

RegExp对象的实例属性 
这里写图片描述

RegExp对象的静态属性(全局变量) 
这里写图片描述

正则表达式的Stirng方法

search(): 返回第一个匹配的子字符串开始字符的索引或者-1(没有找到任何匹配)

如:”javascript regular expressions are powerful!”.search(/pow.*/i)=35; 
而:”javascript regular expressions are powerful!”.search(/\d/i)=-1; 
split():将字符串分成子字符串,并以数组的形式返回

如:var string=”10/3//4/7/9”;var splitExp=/[\/]+/;myArray=string.split(splitExp); 
则myArray[0]=”10”; myArray[1]=”3”;……;myArray[4]=”9”;

replace():返回字符串,用第二个参数替换匹配第一个参数(一个正则表达式)的文本所得到的结果。可以指定是否全局匹配。

如:s=”hello.regexps are fun.”.replace(/./g,”!”)将返回”hello!regexps are fun!”. 
可用该方法实现自己的Trim方法,如: 
function Trim(inputStr){ return inputStr.replace(/(^\s*)|(\s*$)/g,”“); } 
match()方法:使用一个正则表达式为为参数,返回包含了匹配结果的数组。

如:var pattern=/\d{2}/g;var n=”22,33,33,33”;var result=n.match(pattren); 
则result[0]=”22”; …. result[3]=”33”; 
高级正则表达式:

/^.*$/gm:可以将一段多段落文字按换行符分解到几个字符串里。

如:var text=”this is a multiplane lines\n this is a 2nd lines\n this is a 3th lines” 
var lines=text.match(“/^.*$/gm”); 则 
lines[0]= ”this is a multiplane lines”; 
lines[1]= ”this is a 2nd lines”; 
lines[2]= ”this is a 3th lines”; 
(?:):规定加括号内的子表达式不能被捕获。

如:var pattern=/(?:abc)(def)/ 
var text=”abcdef”.replace(pattern,”ksdkfj:$1”)将返回:”ksdkfj: def”; 
如果pattern=/(abc)(def)/则返回:” ksdkfj: abc”。

(?=):规定只有在某条目后面紧跟着包含在(?=)中的表达式时,才会对前面的条目匹配。

如:var pattern=/\d(?=.\d+)/ 匹配”3.3 “、”3.14”,但不匹配”3”或”3.” 。 
(?!):与(?=)正好相反。

如:var pattern=/\d(?!.\d+)/匹配”3 “但不匹配”3.3 “,”3.14” 
正则表达式的局限性:

1、 匹配要求的复杂性使得不可能满足任意想要的匹配模式; 
2、 只能对语法而不能对语义的有效性进行验证。例如:025-1234567是合法的电话号码,但不一定是实际存在的电话号码。

0 0
原创粉丝点击