正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
## 一、创建
创建正则表达式和创建字符串相似,有以下两种方法。
方法一:NEW运算符
~~~
var box = new RegExp("Box", 'ig');
~~~
方法二:字面量
~~~
var box=new RegExp/box/ig;
~~~
模式参数
| 参数 | 含义 |
|-----|-----|
| i | 忽略大小写 |
| g | 全局匹配 |
| m | 多行匹配 |
## 二、测试
RegExp对象提供两个测试方法:
方法一:test()
在字符串中查找是否存在指定的正则表达式,返回值为布尔值,如果匹配到了就返回True,如果不存在就返回False。
方法二:exec()
如果执行成功,就返回包含该查找字符串的相关信息数组。如果失败返回NULL。
实例1:
匹配信息为box,i参数是不区分大小写。在str变量存放的字符串中查找,返回的变量为True。
~~~
var pattern = new RegExp('box', 'i');
var str = 'This is a Box!';
alert(pattern.test(str));
~~~
![](https://box.kancloud.cn/2016-08-19_57b6bd26bdb1b.jpg)
实例2:
用exec()方法返回的是匹配到的源字符串中的内容,如果没有匹配到则返回NULL.
~~~
var pattern = new RegExp('box', 'i');
var str = 'This is a Box!';
alert(pattern.exec(str));
~~~
![](https://box.kancloud.cn/2016-08-19_57b6bd26ec3ff.jpg)
## 三、其他方法:
![](https://box.kancloud.cn/2016-08-19_57b6bd2710741.jpg)
1、match()方法
~~~
var pattern = /Box/ig;
var str = 'This is a big Box!That is a beautiful box';
alert(str.match(pattern));
~~~
返回为:Box,box
2、replace()方法
~~~
var pattern = /Box/ig;
var str = 'This is a big Box!That is a beautiful box';
alert(str.replace(pattern,'Apple'));
~~~
返回为:This is a big Apple!That is a beautiful Apple
3、search()方法
~~~
var pattern = /Box/ig;
var str = 'This is a big Box!That is a beautiful box';
alert(str.search(pattern));
~~~
返回为:查到的位置,如果查不到就返回-1.
4、split()方法
~~~
var pattern = /Box/ig;
var str = 'This is a big Box!That is a beautiful box';
alert(str.split(pattern));
~~~
返回为:拆分成的字符串数组。This is a big ,!That is a beautiful ,
## 四、获取控制
正则表达式元字符是包含特殊含义的字符,它们有一些特殊功能,可以改变匹配模式的方式。做个简单的例子。
实例:
简单的电子邮件验证:
~~~
var pa = /^([\w\.\-]+)@([\w\-]+)\.([\w]{2,4})$/;
var str = 'zhou@163.com';
alert(pa.test(str));
~~~
()的作用是分组模式,{2,4}的意思是匹配分组里的字符串2-4次。
正则量词的贪婪与惰性:
贪婪量词:先看整个字符串是否匹配,如果不匹配就把最后一个字符去掉在进行匹配,不匹配继续去掉最后一个字符,指导找到一个匹配或者不剩任何字符才停止。
惰性量词:先看第一个字符串是否匹配,如果第一个不匹配就在加入第二个字符串依此类推,指导找到一个匹配或者不剩任何字符才停止,贪婪量词与贪婪量词的方法正好相反.
实例一:
?号关闭了贪婪匹配,只替换了字符串中的第一个字符a.
~~~
var pattern = /[a-z]+?/;
var str = 'abcdefghijklmnopqrstuvwxyz';
var result = str.replace(pattern, 'YYY');
alert(result);
~~~
返回值为;YYYbcdefghijklmnopqrstuvwxyz
实例二:
g参数开启的全局,禁止了贪婪。
~~~
var pattern = /8(.+?)8/g;
var str = 'This is 8google8,That is 8google8,There is 8google8 ';
var result = str.replace(pattern, '<strong>$1</strong>');
document.write(result);
~~~
## 五、总结:
假设用户在填写HTML表单的时候,需要写姓名,年龄,性别,E-Mail等,在提交到服务器之前,在前端先验证一遍。看看用户输入的信息是否符合规定。这种客户端验证的方法,可以节省大量的服务器系统资源,获得更好的用户体验。