概念
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
语法规则
正则表达式的创建方法有两种:
1、直接量 其本身是一个对象,表达的意义是一种规则。
var reg = /ab/
var str = "abcdef"
console.log(reg.test(str))
2、构造方法RegExp()
var reg = new RegExp("ab")
var str = "abcdef"
console.log(reg.test(str))
正则表达式的对象方法
1、test ---- 检测字符串中是否含有检测的字符。返回:boolean。
var reg = /ab/
var str = "ABabcdeab"
console.log(reg.test(str))
2、exec ---- 寻找字符串中是否含有检测的字符。返回:将找到的字符按数组返回。
var reg = /ab/
var str = "ABabcdeb"
console.log(reg.exec(str))
正则表达式的三个属性
1、 i ---- 执行对大小写不敏感的匹配,即忽略大小写
var reg = /ab/i
var str = "ABcde"
console.log(reg.test(str))
2、 g ---- 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
var reg = /ab/g
var str = "ABabcdeab"
console.log(str.match(reg))
3、 m ---- 执行多行匹配
var reg = /^a/gm //^a表示以a开头
var str = "aBabcd\nabeba" //\n是换行符
console.log(str.match(reg))
正则表达式中的方括号[ ]
方括号用于查找某个范围内的字符:一个中括号代表一位,中括号里边的内容代表的是这一位可以取值的范围 ,如 [a-z] --- 表示a-z之间的任意字符。 [0-9] ---表示0-9之间的任意数字。
var reg = /[a-z][0-9]/g
//表示前一位为字母,紧挨着的后一位为数字
var str = "b2deb3fz213"
console.log(str.match(reg))
注意:1、插入符^放到方括号 [ ] 里边表示"非"的意思
2、在括号 ()里可以加入"|"表示"或"的意思,"|"操作符两边放匹配规则
var reg = /[^a]/g
var str = "abc"
console.log(str.match(reg))
var reg2 = /(ab|ef)/g
var str2 = "abcdefgh"
console.log(str2.match(reg2))
元字符
元字符 | 描述 |
---|---|
\w --word | 查找单词字符(字母+数字+下划线) |
\W | 查找非单词字符==[^\w] |
\d --data | 查找数字 |
\D | 查找非数字字符 |
\s --space | 查找空白字符 |
\S | 查找非空白字符 |
\b --border | 匹配单词边界 "today is friday" |
\B | 匹配非单词边界 |
\t | 查找制表符 |
\n | 查找换行符 |
\f | 查找换页符 |
\v | 查找垂直制表符 |
\uXXXX | 查找以十六进制规定的Unicode字符 |
. --必记 | (点号)查找单个字符,除了换行和行结束符 |
其中需要重点记住以下几个: \w \W \d \D \s \S
var str = "djfh a!$#~89。6\n"
var reg1 = /\d/g
console.log(str.match(reg1));
var reg2 = /\D/g
console.log(str.match(reg2));
var reg3 = /[\d\D]/g // 任意字符
console.log(str.match(reg3));
var reg4 = /\w/g
console.log(str.match(reg4));
var reg5 = /\W/g
console.log(str.match(reg5));
var reg6 = /\s/g
console.log(str.match(reg6));
var reg7 = /\S/g
console.log(str.match(reg7));
量词
量词 | 描述 |
---|---|
n+ | 匹配任何包含至少一个n的字符串 {1,} |
n* | 匹配任何包含零个或多个n的字符串 {0,} |
n? | 匹配任何包含零个或一个n的字符串 |
n{X} | 匹配包含X 个n 的序列的字符串/\w{10}/ /\d{11}/ |
n{X,Y} | 匹配任何包含X 个至Y 个n 的序列的字符串/\w{6,16}/ |
n{X,} | 匹配包含至少X 个n 的序列的字符串 |
n$ | 匹配任何结尾为n 的字符串 |
^n | 匹配任何开头为n 的字符串 |
S(?=n) | 匹配任何其后紧接指定字符串n 的字符串S abc(?=d) |
S(?!=n) | 匹配任何其后没有紧接指定字符串n 的字符串S |
var reg = /[a-c]+/g
var str = "defgh"
console.log(reg.test(str))
var reg2 = /[a-c]*/g
console.log(reg2.test(str))
var reg3 = /\d?/g
var str2 = "abc321d"
console.log(reg3.test(str2))
?=n ----->n只参与条件限定,限定其后紧接指定字符串n 的字符串,但并不参与选择
?!n ----->n只参与条件限定,限定其后没有紧接指定字符串n 的字符串,但并不参与选择
var str = "aabaaaa";
var reg = /aa(?=b)/g; //b只参与条件限定,并不参与选择
console.log(str.match(reg)); //此时只有一个a 它的后面有紧跟字符b
var reg = /aa(?!b)/g;
console.log(str.match(reg)); //此时有4个a 它的后面没有紧跟字符b
补充:1、"\num" 反向引用,指的是要引用的第num个括号里的表达式值
var str = "aaaabbbb";
var reg = /(\w)\1/g; //括号"()"后边的"\1"为反向引用第一个括号的值
var reg2 = /(\w)\1\1\1/g; //3个"\1"代表后边还要引用第一个括号里的值3次
console.log(str.match(reg))
console.log(str.match(reg2))
2、验证特殊字符时,需要加反斜杠。在正则表达式中将其转义为普通字符
var str = "ad754fg\7d5ha8*5u#$^$#"
var reg6 = /\d\*/ //查询字符串中是否含有特殊字符 "*"
console.log(reg6.test(str));
支持正则表达式的String对象的方法
方法 | 描述 |
---|---|
search | 检索与正则表达式相匹配的值,返回匹配字符串的位置 |
match | 找到一个或多个正则表达式的匹配 |
replace | 替换与正则表达式匹配的字串 |
split | 把字符串分割为字符串数组 |