初识正则表达式
2016-07-30 18:28
399 查看
正则表达式的两种构造方法:
1.通过RegExp类的构造方法:
pattern:必选参数 用于指定进行匹配的模式字符串
flags: 可选参数 用于指定正则表达式的标识信息
g:全局标志
i:忽略大小写的标志
m:多行的标志 设置了,^能匹配多行的行开头,$能匹配多行的行结尾
不设置,^只能匹配字符串的行开头,$只能匹配字符串的行结尾
2.通过正则表达式字面量创建RegExp对象
正则表达式的各种字符:
1.字符类
字符 含义
[...] 匹配指定范围内的任意一个字符 例如[012] 可以与0A1B2C的0或1或2匹配
[^...] 匹配不在指定范围内的任意一个字符 例如[^012] 可以与0A1B2C的A或B或C匹配
\d 匹配任意一个数字字符 相当于[ 0~9 ]
\D 匹配任意一个非数字字符 相当于 [ ^0~9 ]
\s 匹配任意空白字符 如空格,制表符,换行符 [ \t\n\f\r ]
\S 匹配任意非空白字符 [^\t\n\f\r ]
\w 匹配任何英文字母,数字字符以及下划线[a~zA~Z0~9]
\W 匹配任何非英文字母,数字字符以及下划线 [^a~zA~Z0~9]
2.量词
字符 含义
? 匹配前一项0次或者1次 也就是前一项是可选的
+ 匹配前一项1次或多次,但至少一次 例如 /JS+/ 可以匹配JSSS
* 匹配前一项0次或者多次 也就是任意次 例如/bo*/ 可以匹配 bo boo booo
{n} 匹配前一项恰好n次,n为非负整数 例如/o{2} / 可以匹配 book
{n,} 匹配前一项至少n次 例如/o{2,}/ 可以匹配good或者goooooood
{n,m} 匹配前一项至少n次但不能超过m次例如/o{2,5}/ 可以匹配good或者goooood
n,m为非负整数 n<=m
(ps:{n,m}数字与逗号之间不能有空格)
3.指定匹配位置
字符 含义
^匹配字符串的行开头/^g/ 匹配good的g bag的g不匹配
$匹配字符串的行结尾/$g/ 匹配bag的g 不匹配good的g
\b匹配单词的边界/e\b/ 匹配“i love seek”中的love的e 不匹配seek的e
\B匹配单词的非边界/e\b/ 匹配“i love seek”中的seek的e 不匹配love的e
4.使用选择匹配符
“|”只能匹配多个选项中的任意一项
5.分组
使用小括号将多个单独的字符或字符类组或子表达式括起来,以便处理像一个独立的单元格 用”|“ ”*“ ”+“ ” ?“来处理
例 /J(ava)?Script/ 匹配JavaScript或JScript 区别/J[ava]Script/
正则表达式的方法:
1.test()用于对一个指定的字符串执行模式匹配 如果搜索到匹配的字符 返回True 否则返回false
语法:RegExp.test(str)
实例 关于固定电话的匹配
2.exec( )方法 返回值不是true false 而且当没有到匹配的字符时 返回null 否则返回一个数组 数组的第一个元素包含与正则表达式相匹配的字符串 其他元素包含的是匹配的各个分组 用括号括起来的子表达式
语法:RegExp.exec(str)
实例 从身份证中获取出生年月
若有错误 欢迎指正
1.通过RegExp类的构造方法:
var objExp=new RegExp(pattern,flags);
pattern:必选参数 用于指定进行匹配的模式字符串
flags: 可选参数 用于指定正则表达式的标识信息
g:全局标志
i:忽略大小写的标志
m:多行的标志 设置了,^能匹配多行的行开头,$能匹配多行的行结尾
不设置,^只能匹配字符串的行开头,$只能匹配字符串的行结尾
2.通过正则表达式字面量创建RegExp对象
var objExp=/\d/g;
正则表达式的各种字符:
1.字符类
字符 含义
[...] 匹配指定范围内的任意一个字符 例如[012] 可以与0A1B2C的0或1或2匹配
[^...] 匹配不在指定范围内的任意一个字符 例如[^012] 可以与0A1B2C的A或B或C匹配
\d 匹配任意一个数字字符 相当于[ 0~9 ]
\D 匹配任意一个非数字字符 相当于 [ ^0~9 ]
\s 匹配任意空白字符 如空格,制表符,换行符 [ \t\n\f\r ]
\S 匹配任意非空白字符 [^\t\n\f\r ]
\w 匹配任何英文字母,数字字符以及下划线[a~zA~Z0~9]
\W 匹配任何非英文字母,数字字符以及下划线 [^a~zA~Z0~9]
2.量词
字符 含义
? 匹配前一项0次或者1次 也就是前一项是可选的
+ 匹配前一项1次或多次,但至少一次 例如 /JS+/ 可以匹配JSSS
* 匹配前一项0次或者多次 也就是任意次 例如/bo*/ 可以匹配 bo boo booo
{n} 匹配前一项恰好n次,n为非负整数 例如/o{2} / 可以匹配 book
{n,} 匹配前一项至少n次 例如/o{2,}/ 可以匹配good或者goooooood
{n,m} 匹配前一项至少n次但不能超过m次例如/o{2,5}/ 可以匹配good或者goooood
n,m为非负整数 n<=m
(ps:{n,m}数字与逗号之间不能有空格)
3.指定匹配位置
字符 含义
^匹配字符串的行开头/^g/ 匹配good的g bag的g不匹配
$匹配字符串的行结尾/$g/ 匹配bag的g 不匹配good的g
\b匹配单词的边界/e\b/ 匹配“i love seek”中的love的e 不匹配seek的e
\B匹配单词的非边界/e\b/ 匹配“i love seek”中的seek的e 不匹配love的e
4.使用选择匹配符
“|”只能匹配多个选项中的任意一项
5.分组
使用小括号将多个单独的字符或字符类组或子表达式括起来,以便处理像一个独立的单元格 用”|“ ”*“ ”+“ ” ?“来处理
例 /J(ava)?Script/ 匹配JavaScript或JScript 区别/J[ava]Script/
正则表达式的方法:
1.test()用于对一个指定的字符串执行模式匹配 如果搜索到匹配的字符 返回True 否则返回false
语法:RegExp.test(str)
实例 关于固定电话的匹配
<script> /*var objExp=/\d/; var flags=objExp.test("abc"); alert(flags);*/ function checkTel(){ var str=form1.tel.value; var objExp=/^((\d{3}-)?\d{8})$|^(\d{4}-)?\d{7,8}$/; var flags=objExp.test(str); if(flags){ alert("您输入的号码合法"); }else{ alert("您输入的号码不合法"); } } </script>
<body> <form name="form1" method="post" action=""> 请输入电话号码:<input name="tel" type="text" id="tel"/> <input name="check" type="button" value="检测" onclick="checkTel()"/> </form> </body>
2.exec( )方法 返回值不是true false 而且当没有到匹配的字符时 返回null 否则返回一个数组 数组的第一个元素包含与正则表达式相匹配的字符串 其他元素包含的是匹配的各个分组 用括号括起来的子表达式
语法:RegExp.exec(str)
实例 从身份证中获取出生年月
<script> function getBirthday(){ var str=form1.IDCard.value; var objExp=/(\d{6})(\d{4})(\d{2})(\d{2})(\d{4})/; var arr=objExp.exec(str); if(arr!=null){ alert("出生日期为:"+arr[2]+"年"+arr[3]+"月"+arr[4]+"日"); }else{ alert("输入的身份证不合法"); } } </script>
< 96a6 ;body> <form name="form1" method="post" action=""> 请输入身份证号码: <input type="text" name="IDCard" id="IDCard" size="50"/> <br/> <input type="button" value="从身份证中获取出身年月日" onclick="getBirthday()"/> </form> </body>
若有错误 欢迎指正