正则表达式
什么是正则表达式
Regexp是正则表达式的缩写
当您检索某个文本时,可以使用一种模式来描述要检索的内容
Regexp就是这种模式
简单的模式可以是一个单独的字符
更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等
您可以规定字符串中的检索位置,以及要检索的字符类型,等等
RexExp对象
Regexp对象表示正则表达式,他是对字符串执行模式匹配的强大工具。
定义regexp
通过new关键词来定义regexp对象
格式:new regexp(表达式)
以下代码定义了名为patt1的regexp对象,其模式是“e”:
var patt = new regexp('e');
//当使用该regexp对象在一个字符串中检索时,将寻找的是字符'e'
Regexp对象的方法
Regexp对象有3个方法:test()、exec()、compile()
1.test()
test()方法检测字符串中的指定值。返回值是true或false
例
var reg=new RegExp("exe");
var str="the best things in life are free";
console.log(reg.test(str));
//false
查找不到“exe“,返回false。
2.exec()
exec()方法检索字符串中的指定值,返回值是被找到的值,若没有发现匹配,则返回null。
例
var reg=new RegExp("e");
var str="the best things in life are free";
console.log(reg.exec(str));
由于该字符串内存在“e”,则输出“e”;
3.compile()
compile() 方法用于在脚本执行过程中编译正则表达式。也可用于改变和重新编译正则表达式。
例
var str="Men is left be cause women always right!";
patt=/Men/g;
str2=str.replace(patt,"gentleman");
console.log(str2);
//gentleman is left be cause women always right!
patt=/(wo)?man/g;
patt.compile(patt);
str2=str.replace(patt,"lady");
console.log(str2);
//Men is left be cause lady always right!
直接量语法
var myreg=/pattern(匹配条件)/attributes(参数),
创建Rexexp对象的语法
var myreg=new regexp(pattern,attributes);
参数pattern是一个字符串,指定了正则表达式的模式或其他正则表达式。
参数attributes是一个可选的字符串,属性见下表。
Attributes设置
修饰符 | 描述 |
---|---|
I | 执行对大小写不敏感的匹配。 |
G | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) |
M | 执行多行匹配 |
方括号
方括号用于查找某个范围内的字符
表达式 | 描述 |
---|---|
[abc] | 查找方括号之间的任何字符 |
[^abc] | 查找任何不在方括号之间的字符 |
[0-9] | 查找任何从0到9的数字 |
[a-z] | 查找任何从小写a到小写z的字符 |
[A-Z] | 查找任何从大写A到大写Z的字符 |
[A-z] | 查找任何从大写A到小写z的字符 |
(red | blue |
元字符
元字符metacharacter是拥有特殊含义的字符
表达式 | 描述 |
---|---|
. | 查找单个字符,除了换行和行结束符 |
\w | 查找单词字符 |
\W | 查找非单词字符 |
\d | 查找数字 |
\D | 查找非数字字符 |
\s | 查找空白字符 |
\S | 查找非空白字符 |
\uxxxxx | 查找以十六进制数xxxx规定的unicode字符 |
限定符(量词)
量词 | 描述 |
---|---|
n+ | 匹配任何包含至少一个n的字符串 |
n* | 匹配任何包含零个或多个n的字符串 |
n? | 匹配任何包含零个或一个n的字符串 |
n{X} | 匹配包含x个n的序列的字符串 |
n{X,Y} | 匹配包含x到y个n的序列的字符串 |
n{X,} | 匹配包含至少x个n的序列的字符串 |
^n | 匹配任何开头为n的字符串 |
n$ | 匹配任何结尾为n的字符串 |
常用实例
1.匹配手机号
var phone="13910733521";
var reg=/^1[345789][0-9]([0-9]{4})[0-9]{4}$/;
reg.test(phone)
2.匹配邮箱地址
var mail="11616816@163.com";
var reg=/^(([a-z0-9]+[-_.])?[a-z0-9]+){6,18}@([a-z0-9]+\.){1,2}[a-z]{2,4}$/i;
reg.test(mail)
3.匹配人名
var name="國烏院";
var str=/^[\u4e00-\u9fa5]{2,4}$/;
str.test(name)
4.身份证
var id="11010419890202003X";
var str=/^[^0][0-9]{9}(0[1-9]|1[0-2])(0[0-9]|[1-2][0-9]|3[0-1])[0-9]{3}([0-9]|x)$/
srt6.test(id)
5.号码遮挡
var reg= /^1[345789][0-9]([0-9]{4})([0-9]{4}$)/;
var phone = "13910733521";
var k=reg.exec(phone);
console.log(phone.replace(k[1],"****"));
console.log(phone.replace(reg,"$1$2****"));
6.捕获协议域名端口号
var str = "http://localhost:8080/test.html";
var patt1 = /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/;
arr = str.match(patt1);
for (var i = 0; i < arr.length ; i++) {
console.log(arr[i]);
}