【1.2】正则表达式的作用
【2.1】 匹配不同类型的字符
【2.2】 定位控制字符
【2.3】 指定重复字符
【2.4】特殊控制类
| :指定字符替换,即该位置可以是|两边的任一个表达式
【2.5】特殊字符转义序列
三、正则表达式的高级应用
【3.1】分组
(/d{1,3}/.){3}/d{1,3} 是一个简单的 IP 地址匹配表达式。要理解这个表达式,请按下列顺序分析它: /d{1,3} 匹配 1 到 3 位的数字, (/d{1,3}/.}{3} 匹配三位数字加上一个英文句号 ( 这个整体也就是这个分组 ) 重复 3 次,最后再加上一个一到三位的数字 (/d{1,3}) 。
实例:
【/b(/w+)/b/s+/1/b】可以用来匹配重复的单词,像gogo, kitty kitty。【/b(/w+)/b】匹配一个单词,【/s+】匹配1个或多个空白符,【/1】表示前面匹配的那个单词。
你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?<Word>/w+)(或者把尖括号换成'也行:(?'Word'/w+)),这样就把/w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用/k<Word>,所以上一个例子也可以写成这样:/b(?<Word>/w+)/b/s+/k<Word>/b。
【3.3】零宽断言
下面这个例子同时使用了这两种断言: (?<=/s)/d+(?=/s) 匹配以空白符间隔的数字 ( 再次强调,不包括这些空白符 ) 。
【 捕获 】
( exp ) 匹配 exp , 并捕获文本到自动命名的组里
(?<name> exp ) 匹配 exp , 并捕获文本到名称为 name 的组里,也可以写成 (?' name'exp )
(?: exp ) 匹配 exp , 不捕获匹配的文本,也不给此分组分配组号
【 零宽断言 】
(?= exp ) 匹配 exp 前面的位置
(?<= exp ) 匹配 exp 后面的位置
(?! exp ) 匹配后面跟的不是 exp 的位置
(?<! exp ) 匹配前面不是 exp 的位置
【 注释 】
(?#comment) 这种类型的组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
四、常用的正则表达式
decmal:"^([+-]?)\\d*\\.\\d+$",//浮点数
decmal1:"^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*$",//正浮点数
decmal2:"^-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*)$",//负浮点数
decmal3:"^-?([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0)$",//浮点数
decmal4:"^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0$",//非负浮点数(正浮点数+ 0)
decmal5:"^(-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*))|0?.0+|0$",//非正浮点数(负浮点数+ 0)
intege:"^-?[1-9]\\d*$",//整数
intege1:"^[1-9]\\d*$",//正整数
intege2:"^-[1-9]\\d*$",//负整数
num:"^([+-]?)\\d*\\.?\\d+$",//数字
num1:"^[1-9]\\d*|0$",//正数(正整数+ 0)
num2:"^-[1-9]\\d*|0$",//负数(负整数+ 0)
ascii:"^[\\x00-\\xFF]+$",//仅ACSII字符
chinese:"^[\\u4e00-\\u9fa5]+$",//仅中文
color:"^[a-fA-F0-9]{6}$",//颜色
date:"^\\d{4}(\\-|\\/|\.)\\d{1,2}\\1\\d{1,2}$",//日期
email:"^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$",//邮件
idcard:"^[1-9]([0-9]{14}|[0-9]{17})$",//身份证
ip4:"^(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)$",//ip地址
letter:"^[A-Za-z]+$",//字母
letter_l:"^[a-z]+$",//小写字母
letter_u:"^[A-Z]+$",//大写字母
五、JS中的RegExp对象
【5.1】创建RegExp对象实例
varregObj =newRegExp(“pattern” [,” flags ”] );
参数说明:
pattern:必选项,正则表达式的字符串。
flags:可选项,是一些标志组合。
varregObj =/pattern/[flags];
regObj.test(string );//验证通过则返回true,不通过返回false
【5.2】RegExp的方法
【5.2.1】 test()
var filter = /一枪爆头/g;//将受限制的词句组成正则表达式
var said = "他被人一枪爆头了";//将接受检查的语句
if( filter.test( said ) )//如果被检查语句中存在受限词句
{
alert( "该语句中有限制级词语,系统已经过滤!" );//显示警告
}
else // 否则
{
alert( said ); //输出原话
}
12 </script>
【5.2.2】exec()方法
<script language="javascript">
varreg = /.o./g;//寻找字符o前后接任意字符组成的有三个字符的字符串
varstr = "How are you?"//源串
var result = new Array();//用于接收结果
while( reg.exec(str) != null )//执行匹配操作,如果找到匹配则继续找下一项
{
result.push(RegExp.lastMatch );//添加结果
}
alert( result ); // 输出找到的匹配项
</script>
【5.2.3】match方法
<script language="javascript">
varshowStr="";//定义一个变量,并赋空值
varstr = "this word isOKOKOKOKokokokok!!!";//给变量赋初值
varsearchStr = /(OK){2}/gi;//分组的正则表达式
var result=str.match(searchStr);//查找匹配
for (var i = 0; i <result.length; i++)//循环访问arrdata对象
{
showStr+=result[i]+"\n";//显示信息
}
alert("一共有"+result.length+"组匹配\n"+showStr);//显示最后匹配的结果
</script>