正则表达式(regular expression)用于匹配特定规则的字符,比如验证一个邮箱的地址是否正确,电话号码是否合法等等,具有很好的灵活性复用性。它不是JavaScript独有的东西,准确的说它是一个标准。大部分的开发语言都有自己正则的定义方式,但是规则基本是一致的。这里我们主要介绍JavaScript中的正则表达式
16.01 - 概述
两种定义正则的方式
字面量
var reg = /hello/;
var str= 'hello world!';
reg.test(str); // true
RegExp构造函数
构造函数定义的正则,正则体为传递的参数字符串。所以可以用变量代替某一部分的内容
var reg = new RegExp('hello');
var str= 'hello world!';
reg.test(str); // true
基本匹配规则
正则表达式中的大部分字符都被认为是普通的字符(字面量字符),所以最基本的方式需要匹配的字符写入正则表示式中。
但是实际上正则的使用都是许多比较复杂的规则,大多数需要匹配的,不是某个准确的字符,可能是一个范围内的字符,或者特定的字符结构,特定数量、顺序等等,这些特点都能成为匹配的条件
普通字符(字面量字符)
var str = 'hello world';
var reg = /world/;// 匹配 world
str.replace(reg,'JavaScript'); // hello JavaScript
特殊字符(元字符):特殊字符在正则表达式中有特定的含义或者作用,不能视作普通字符。如果需要匹配的是字符是特殊字符,需要进行转义
.
点字符:匹配除开回车,换行,分割符之外的所有字符
var str = 'abc'; var reg = /a.b/;// 匹配 a任意字符b str = str.replace(reg,'-'); // a-c str = str.replace(reg,'+'); // a+c
^
$
位置字符:表示开始和结束的特殊字符
var str = 'hello world!'; var reg = /world$/;// 匹配 world结束 str.replace(reg,'JavaScript'); // hello world! world之后是感叹号并没有结束,无法匹配
|
竖线符号:表示或者或者的关系
var str = 'hello'; var reg = /hello|world/;// 匹配hello 或者 world str = str.replace(reg,'world'); // world str = str.replace(reg,'hello'); // hello
*
+
?
量词符号:量词符号()
{}
[]
括号:划分特殊区域\
反斜线:转义符号,转义符号之后的字符将会被转义,有特殊意义的符号将会失去意义,同时也可以让某些普通字符赋予特殊意义匹配特殊符号
var str = '1.1'; var reg = /1\.1/;// 匹配 1.1
预定义字符
预定义字符,表示预设的一些常用的字符集合,通过转义对应的字符来表示。
同时大小写代表不同的含义,小写代表该类型,大写为非该类型,例如:
\d
为匹配所有单个的数字,\D
为匹配所有的单个非数字\d \D
单个的所有数字\s \S
空格\w \W
所有字符( 字母 数字 _ )\b \B
独立部分 (空格 ^ $ - )
特殊字符
\n
匹配换行键。\r
匹配回车键。\t
匹配制表符 tab
16.02 - 字符集
字符集用于表示字符的集合正则中用中括号
[]
表示,匹配的过程中只需要匹配其中的一个字符就符合匹配条件,并且可以表示一个区间内的所有字符
普通字符集
var reg = /a[1m帅]b/;// 匹配 a 1或m或帅 b
'a帅b'.replace(reg,'amo')// amo
.replace(reg,'帅');// amo
范围字符集
范围字符集与普通字符集一样表示集合中的某个字符,但是可以用于表示一个区间内的连续字符,比如数字:0-9,字母:a-z
中文区间:
var reg = /[a-c1-3]/;// 匹配 a到z 1到5 之间的任意字符 等同 /a|b|c|1|2|3/ 或 /[abc123]/
reg.test('c');// true
reg.test('2');// true
子项集
量词
标识符
方法