认识正则表达式
正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象。
正则表达式有很多用处,例如:检索关键字,过滤敏感字符,表单验证等等。
正则表达式的灵活性、逻辑性和功能性都很强,可以迅速地用极简单的方式达到字符串的复杂控制。对于刚接触的人来说,比较晦涩难懂。比如:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
。不过,实际开发中,一般都是直接复制已经写好的正则表达式,会使用正则表达式并且根据实际情况修改正则表达式即可。
接下来我们继续了解正则表达式的基本使用。
正则表达式的简单使用
创建
js中有两种方式创建正则表达式
// 方式一:通过调用RegExp对象的构造函数创建
var reg = new RegExp(/123/);
// 方式二:利用字面量创建 正则表达式
var reg = /123/
测试
test() 正则对象方法,用于检测字符串是否符合该规则,该对象会返回 true 或 false,其参数是测试字符串。
var reg = /abc/;
var n = reg.test('aabbcc');
console.log(n); // false
var n = reg.test('abcaabbcc'); //true
正则表达式的特殊字符
一个正则表达式可以由简单的字符构成,比如 /abc/,也可以是简单和特殊字符的组合,比如 /ab*c/ 。其中特殊字符也被称为元字符,在正则表达式中是具有特殊意义的专用符号,如 ^ 、$ 、+ 等。特殊字符非常多,可以参考MDN-正则表达式,或者参考jQuery 手册:正则表达式部分。
测试可以借助 正则测试工具
边界符
正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符
边界符 | 说明 |
---|---|
^ | 表示匹配行首的文本(以谁开始) |
$ | 表示匹配行尾的文本(以谁结束) |
var str = /^abc/;
console.log(str.test('abcabcdfiodjifj')); // true
console.log(str.test('aababc')); // false
如果 ^和 $ 在一起,表示必须是精确匹配。
var str = /^abc$/;
console.log( str.test('abc234567abc') ); //false
console.log( str.test('abc') ); // true
字符类
字符类表示有一系列字符可供选择,只要匹配其中一个就可以了。所有可供选择的字符都放在方括号内。
方括号[]
//精确匹配,多选一
var reg = /^[a|b|c]$/;
console.log( reg.test('') ); // false
console.log( reg.test('ab') ); // false
console.log( reg.test('a') ); // true
console.log( reg.test('b') ); // true
console.log( reg.test('c') ); // true
console.log( reg.test('abc') ); //false
//精确匹配,多选一
var reg1 = /^[a-zA-Z0-9]$/;
console.log( reg1.test('a')); //true
console.log( reg1.test('B')); //true
console.log( reg1.test('ab')); //false
方括号内部加上 ^
表示取反,只要包含方括号内的字符,都返回 false
// 取反
var reg2 = /^[^a-zA-Z0-9]$/;
console.log(reg2.test('a'));//false
console.log(reg2.test('B'));//false
console.log(reg2.test(8));//false
console.log(reg2.test('!'));//true
量词符
量词符用来设定某个模式出现的次数。
量词 | 说明 |
---|---|
* | 重复0次或更多次 |
+ | 重复1次或更多次 |
? | 重复0次或1次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
// *
var reg = /^[abc]*$/;
// +
var reg = /^[abc]+$/;
// ?
var reg = /^[abc]?$/;
// {n}
var reg = /^[abc]{n}$/;
// {n,}
var reg = /^[abc]{n,}$/;
// {n.m}
var reg = /^[abc]{n,m}$/;
小案例-表单验证
来做个用户名表单验证的简单小案例吧:
功能需求:
- 如果用户名输入合法, 则后面提示信息为: 用户名合法,并且颜色为绿色
- 如果用户名输入不合法, 则后面提示信息为: 用户名不符合规范, 并且颜色为红色
结构
<input type="text"><span></span>
样式
.right {
color: green;
}
.error {
color: red;
}
javaScript
var txt = document.querySelector('input');
tet.onblur = function () {
//正则表达式
//
var reg = /^[a-zA-Z0-9_-]{6,16}$/;
if (reg.test('this.value')) {
// 输入合法
this.nextElementSibling.innerHTML = '<b>用户名格式输入正确</b>';
this.nextElementSibling.className = 'right';
} else {
// 输入不合法
this.nextElementSibling.innerHTML = '<b>用户名格式输入不正确</b>'
this.nextElementSibling.className = 'error';
}
}