什么是正则表达式
正则表达式以前学过几次,但总是学了就忘,今天特意把所学都写下来。
正则表达式是用于匹配字符串中字符组合的模式,在JavaScript
中,正则表达式是对象。
常用于检索、替换那些符合某个模式(规则)的文本,如验证表单,使之只能输入英文字母、数字以及下划线等等;还可以用来过滤页面中的一些敏感词。
正则表达式在JavaScript中的使用
创建正则表达式
可以通过两种方式创建正则表达式,要使用斜杠包起来,里面不需要加引号,不管是数字型还是字符型
- 通过
RegExp
对象的构造函数创建
var 变量名 = new RegExp(/表达式/);
- 通过字面量直接创建(常用)
var 变量名 = /表达式/
创建好正则表达式后,就可以使用test
方法对字符串进行检验了,如
var reg = /abc/;
var str = 'abcd';
var str2 = 'zlfan';
reg.test(str); //true
reg.test(str2); //false
正则表达式可以由简单字符构成,如 /abc/ ,也可以是简单字符加特殊字符的组合,如 /ab*c/。其中特殊字符被称作元字符
,它在正则表达式中具有特殊意义,如 ^,$,+。
下面开始学习常用特殊字符。
边界符
正则表达式边界符用来提示字符所处位置,主要有两个字符
边界符 | 说明 |
---|---|
^ | 匹配以谁开始的文本 |
$ | 匹配以谁结尾的文本 |
var reg1 = /123/;
var reg2 = /^1/;
var reg3 = /6$/;
var reg4 = /^123$/;
var num = 123456;
reg1.test(num); //true 只要num有出现123就返回true
reg2.test(num); //true
reg3.test(num); //true
reg4.test(num); //false 只匹配 123
字符类
字符类:[ ] 表示有一系列的字符可供选择,只要匹配其中一个即可。
var reg = /[abc]/; //只要包含有a,b,c其中一个字符就返回true
var str = 'qwera';
reg.test(str); //true
它里面还有一个范围符 - 和取反符 ^,如
var reg = /[0-9]/; //0-9中的一个数字
var reg = /[a-z]/; //a-z小写英文中的一个字符
var reg = /[A-Z]/; //A-Z大写英文中的一个字符
var reg = /[^0-9]/; //非0-9的一个字符
var reg = /[^a-z]/; //非a-z的一个字符
var reg = /[^A-Z]/; //非A-Z的一个字符
注意:[ ] 里面的取反符和 边界符是同一个符号,写的时候要注意位置是否书写正确。这些范围可以和简单字符拼接在一起,
如用于匹配数字、大小写英文、连接符 - 和下划线中的一个:
var reg = /[0-9a-zA-Z-_]/;
量词符
前面学习的内容只能匹配一个字符,如果要匹配多次就要使用到量词符。用它来设定某个模式出现的次数:
量词 | 说明 |
---|---|
* | 重复0次或者多次 |
+ | 重复1次或者多次 |
? | 重复0次或者1次 |
{n} | 重复n次 |
{n,} | 重复至少n次 |
{n,m} | 重复n到m次,注意花括号里面不能有空格 |
var reg = /a*/; // a 出现0次或多次
var reg = /a+/; // a 出现1次或多次
var reg = /a?/; // a 出现0次或1次
var reg = /a{3}/; // a 出现3次
var reg = /a{3,}/; // a 出现3次或多次
var reg = /a{3,6}/; // a 出现3到6次
例子:
var reg = /^a{3,6}$/;
reg.test(''); //false
reg.test('a'); //false
reg.test('aaa'); //true
reg.test('aaaa'); //true
reg.test('aaaaaaaaa'); //false
学到这里应该能看懂这条语句的意思了
var reg = /^[0-9a-zA-Z-_!]{6,18}$/;
小括号()
和 或 |
的使用,注意下面的不同
var reg = /^abc{3}$/ //它只是让c出现三次
var reg = /^(abc){3}$/ //使得abc优先级提高,让abc连续出现三次
var reg = /^(a|ab){3}$/ //a 或者 ab 总共出现三次
括号的总结
- 小括号 表示优先级,还有分组
- 中括号 表示字符集合,匹配中括号中的任何字符
- 大括号 量词符号,表示重复的次数
预定义类
预定义类指的是某些常用模式的简写方式,如:
预定义类 | 说明 |
---|---|
\d | 匹配0-9任何数字,相当于[0-9] |
\D | 匹配0-9以外的任何数字,相当于[^0-9] |
\w | 匹配任意的字母、数字和下划线,相当于[0-9a-zA-Z_] |
\W | 除字母、数字和下划线以外的任何字符,相当于[^0-9a-zA-Z_] |
\s | 匹配空格,包括换行符、制表符空格等,相当于[\t\r\n\v\f] |
\S | 匹配非空字符,相当于[^\t\r\n\v\f] |
例子:匹配座机电话 020-12345678
var reg = /^\d{3}-\d{8}$/;
一些零碎知识
在replace()方法中使用正则表达式,表达式也有参数,表示按照什么样的模式来匹配,介绍三个常用值:
- g 全局匹配,如果不加replace()方法只会替换第一个符合条件的
- i 忽略大小写
- gi 全局匹配 + 忽略大小写
var str = 'abcABC';
str.replace(/ABC/g,'abc'); //返回新字符串 'abcabc'
如果要匹配特殊符号怎么办?可以使用反斜杠,其他特殊字符同理
var reg = /abc\*/;
学习了以上知识基本上算入门了,如想掌握更加高级的用法,请点击下面的链接