JavaScript中的正则表达式简介
2016-02-18 14:34
429 查看
JavaScript正则表达式:
正则表达式的字面语法格式
一个正则表达式的格式如下:
/由字符、字符类、特殊字符类、分组符、位置指示符、转义码、重复计量器、可选量符号组成的字符串/正则表达式标记
如:/^(http)[1-3]{2,4}\d\w$/ig
正则表达式标记:
![](http://img.blog.csdn.net/20160218113410958)
正则表达式位置指示符:规定模式在它所匹配的字符串里的位置。
![](http://img.blog.csdn.net/20160218113644397)
可以同时使用这两个位置指示符来确保精确的匹配给定的模式,如:/^http$/ 将只匹配http。
转义码:
![](http://img.blog.csdn.net/20160218113800299)
用在正则表达式中的转义码是用在字符串中的转义码的超集(在正则表达式中有很多带特殊含义的字符如^和$等)。
正则表达式的重复计量器:指定某个字符或字符组合可以或者必须出现的次数。
![](http://img.blog.csdn.net/20160218113901757)
分组符”()”:在使用重复计量器时可以将字符用()组合起来作为一个项目
如:/a(34)+c/ 匹配任何含有一个a跟随一个或者多个”34”再紧跟一个c的字符串。
字符类:
可以使用[]指定一个有效的字符集合
如:/[123]/ 匹配任何含有1、2、3数字的字符串。
在[]中可以使用减号” - ”符指定取值范围
如: /[0-9a-z]/ 匹配任何含有数字和小写字母的字符串
在[]中还可以使用” ^ ”来指定不能出现的字符类
如:/[^a-zA-Z]/ 将匹配任何一个至少含有一个非字母字符的字符串
其他特殊字符类:
![](http://img.blog.csdn.net/20160218114014426)
子表达式:正则表达式可以用”()”分组,用于RegExp对象自身来访问子表达式成分
如:var pattern = /(\w+) ([\d-]+)/;
var customer = “Alan 555-2334”;
pattern.test(customer);
alert(“1=“+RegExp.1
+ “\n2=”+RegExp.2);
会显示:
” 1=Alan””2=
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对象的实例属性
![](http://img.blog.csdn.net/20160218114127928)
RegExp对象的静态属性(全局变量)
![](http://img.blog.csdn.net/20160218114215711)
正则表达式的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是合法的电话号码,但不一定是实际存在的电话号码。
正则表达式的字面语法格式
一个正则表达式的格式如下:
/由字符、字符类、特殊字符类、分组符、位置指示符、转义码、重复计量器、可选量符号组成的字符串/正则表达式标记
如:/^(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=Alan””2=
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是合法的电话号码,但不一定是实际存在的电话号码。
相关文章推荐
- js拼接运算符
- js变量null和undefined的区别
- JS自动缩放页面图片
- 访问web-inf下jsp资源的几种方式
- JS对象属性使用的问题
- JavaScript对象(来自百度知道)
- javascript base64 字符转换
- Javascript对象中关于setTimeout和setInterval的this介绍
- JS身份证真实性校验(一)
- js数组去重
- js详解之作用域-实例
- js实现checkbox多选和反选
- STL 优先队列实现的DIJSKTRA算法
- JSHint 配置浅析
- Js实现简单的小球运动特效
- 基于Newtonsoft.Json进行JSON文档的解析
- 《JavaScript高级程序设计》读书笔记(四)
- JS 实现可停顿的垂直滚动
- C#集合转换为json
- 学习html&css&JavaScript记录