符号表
正则表达式
(regular expression)是一个描述字符模式的对象,RegExp是一个类,用来表示正则表达式,它定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数。其实String类也提供了一些方法,但String是后台代码,也即是服务器来验证的,而RegExp用客户端验证可节省服务器的系统资源。
如何创建正则表达式?
1. 用new的方式,类似创建一个字符串
* var box=new RegExp('Box');
alert(box);//打印 /Box/ 自动加俩反斜杠,即变成字面量,俩反斜杠是字面量表示法
* var box=new RegExp('Box','ig');//第二参数可选
alert(box);//打印 /Box/gi 顺序无所谓
2. 用字面量表示法(常用)
* var box=/Box/;
alert(box);//打印 /Box/
* var box=/Box/ig;//直接加修饰符
alert(box);//打印 /Box/gi
- test与exec方法
test用法:匹配是否存在而不是相等
用new方法
var pattern=new RegExp(‘Box’);//模式
var str=’box’;
alert(pattern.test(str));//打印 false 因为大小写不同
字面量方法
var pattern=/Box/i;
var str=’box’;
alert(pattern.test(str));//true
匹配一句话呢?
var pattern =/Box/i;
var str=’This is a box!’;
alert(pattern.test(str));//true 字符串中包含忽略大小写的Box
字面量一句话过(不提倡)
alert(/Box/i.test(‘box’));
exec(匹配是否存在,返回数组)
var pattern=/Box/i;
var str=’box’;
alert(pattern.exec(str));//打印 box
//alert(typeof pattern.exec(str));//打印 object,数组确实是对象
var pattern =/Box/i;
var str=’sss’;
alert(pattern.exec(str));//打印 null
- 表示某些规则的字符范围
- 匹配成功返回true,否则false
- 把我们想匹配的范围用中括号括起来,如,第一行最后一列,[a-z]表示匹配范围是a-z,多种范围可以直接连着写然后中括号括起来;[abc]表示只能是a\b\c
- ^Hi,表示匹配到Hi的位置必须是行首
- 那么特殊字符如何匹配呢?
- 比如,^已经是正则里的特殊字符,可是我就想匹配它,那么在前面加\把它转义成普通字符
- 分组其实就相当于循环节,单独使用分组没有什么意义
- /(abc)\1/表示把abc分组,\表示abc,那么就相当于匹配到的必须是两个abc连着的
- 仅分组表示只是分组,并不应用到\上,那么/(?:abc)(def)\1/表示应用到\上的是(def),于是.test(‘abcdefdef’);返回true
- abc表示重复0次或多次,采用贪婪算法表示优先匹配重复次数多的,如上面优先匹配abcccccc;加个?表示采用非贪婪算法,则abc ?优先匹配ab
- 从返回false或true的角度上看,x*?、x+?匹配0次、1次或多次;x?匹配0次或1次
- x|y 中间是竖线而非斜线
- x{1,3}表示x应重复1-3次
- 锚元字符匹配
- 代码示例:E->js->demo匹配.js
- 正则表达式中有三个标签,第一个表示 把整串字符串匹配完,不加的话可能匹配到第一个它就结束了,那么我们希望它匹配到所有的话就要加global
- 第二个表示忽略大小写
- 第三个表示跨行检索
- /abc/gim.test(“ABC”),写gim表示加了三个标签,顺序无所谓,匹配返回true
- String的字符串匹配方法也可以用到正则表达式中,如,match、search、
- 代码示例:E->js->demo.js
- 在notepad写什么文件完要运行之前都记得保存啊,否则怎么运行都出不来结果,还找不到哪里出错
- 反正运行出错首先检查保存了没
- alert(“密码必须在6—12位之间”);
document.getElementById('password').focus();//获取焦点
上面这段代码将陷入死循环,改正:
alert("密码必须在6—12位之间");
setTimeout(function () {
document.getElementById('password').focus();
}, 500);