正则表达式
正则表达式:规则表达式,主要用于规定字符串的出现规则
通过正则指定特定字符串出现的规则,去匹配某些字符串,如果匹配成功,就可以得到结果
最简单的正则表达式语法
关键字正文:abc
正则对象 生成正则表达式
语法糖:
var reg = /abc/;
构造函数
var reg = new RegExp("abc");
test方法 检测一个字符串是否符合这个规则,如果符合返回true,否则返回false
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
var str = '那天我去了她家,我对她说你家真大';
//声明一个正则
var reg = /我/;
var res = reg.test(str);
alert(res);
</script>
</body>
</html>
元字符 预定义字符集 ;正则表达式 自己定义好的,代表特殊含义的字符
. 任意字符 换行除外
\ 转义 \.普通的点
\d 数字
\w 数字 字母 下划线
\s 空字符 空格
\D 非数字
\W 非 数字字母下划线
\S 非空
限定符 用于修饰元字符出现的次数 量词
*
: 前一个内容重复至少 0 次,也就是可以出现 0 ~ 正无穷 次+
: 前一个内容重复至少 1 次,也就是可以出现 1 ~ 正无穷 次?
: 前一个内容重复 0 或者 1 次,也就是可以出现 0 ~ 1 次{n}
: 前一个内容重复 n 次,也就是必须出现 n 次{n,}
: 前一个内容至少出现 n 次,也就是出现 n ~ 正无穷 次{n,m}
: 前一个内容至少出现 n 次至多出现 m 次,也就是出现 n ~ m 次
注意:用来修饰 元字符 修饰时前面一个元字符
边界符
需要完整匹配 一个字符 从开头到结束 每一位规则 数量规则
^匹配开头
$匹配结束
//必须是 小写字母a开头 总共是 4-8位数字字母_
var reg = /^\w{3,7}$/;
var a = 's74935';
var b= 'a23845675493821';
var c= 'a23456';
alert(reg.test(a)); //false
alert(reg.test(b));//false
alert(reg.test(c));//true
其他符号
[] 备选字符集 匹配一位的 可以在中括号写 这一位可能出现的多个字符
如果这一位的备选字符是连续的 比如 a-z A-Z 0-9可以用 -连接
//必须是 大写字母A-Z开头 总共是 4-8位数字字母_
var reg = /^[A-Z]\w{3,7}$/;
var a = "A28248";
var b = "a34546";
var c = "F468354695879689";
alert(reg.test(a)); //true
alert(reg.test(b)); //false
alert(reg.test(c)); //false
//必须是 大写字母A-Z或者_或者1-7开头 总共是 4-8位数字字母_
var reg = /^[A-Z_1-7我]\w{3,7}$/; 首字母可以是A-Z或者_或者1-7或者我
() 分组 将几位作为一个完整的规则
需求:有一个字符串 结束 必须是三位 abc出现一次 或者abc没有
使用场景:多位字符需要被修饰符修饰 (量词),需要加()
var reg = /^\w{3,7}(abc)?$/
| 选择 或
字符串结尾 可以是 a或b
var reg =/^\w[acd457]a|c$/;
var str = 'c';
alert(reg.test(str));//true
错误原因:js 将 | 两边作为两个选择 规则就变成了 可以是 \w[acd457]a 或者 c
怎么解决:用()分组解决
var reg =/^\w[acd457](a|c)$/;
注意:选择 一般都会伴随着分组
备选字符集取反 [^] 取反
[^abc] 除了abc的任意字符
关键字
i ignore 忽略大小写
/[a-z]/i; a-zA-Z
g global 全局匹配 不会只找到第一个复合条件的字符就立即返回,继续查找
/\w/g
注意:
关键字是用来修饰 正则对象的 写在正则的后面
如何匹配字符串开头和结尾的空格
var reg = /^\s*|\s*$/;