01-正则表达式
# 什么是正则表达式
正则表达式(regular expression)描述了字符串的“构成模式”,经常被用于检查字符串是否符合预定的格式要求。
用一个例子快速演示正则表达式基本使用方法:检查某个字符串是否是 6 位数字。
正则表达式"按位”描述规则,是指它是一位一位的描述字符串的构成形式。
比如检查字符串是不是这样的:以字母 m 开头,然后是 3 个数字,最后以字母 n 结尾。
# 正则表达式的基本使用
# 正则表达式的创建
使用/内容/的语法形式,可以快速创建正则表达式
也可以使用 new RegExp('内容')
的形式,创建正则表达式公
使用 typeof
运算符检查正则表达式的类型,结果是 object
// 创建正则表达式方法1
var regexp1 = /^\d{6}$/;
// 创建正则表达式方法2
var regexp2 = new RegExp('^\\d{6}$');
var str = '555666';
console.log(regexp1.test(str)); // true
console.log(regexp2.test(str)); // true
console.log(typeof regexp1); // object
console.log(typeof regexp2); // object
2
3
4
5
6
7
8
9
10
11
12
# 元字符
元字符是指一位指定类型的字符
元字符注意事项:
如果使用 new RegExp()
写法,反斜杠需要多写一个。比如 /\d$/
和 new RegExp('^\\d$')
是相同的意思。
在特殊字符之前的反斜杠八表示下一个字符不是特殊字符,应该按照字面理解。
不管一个符号有没有特殊意义,都可以在其之前加上一个以确保它表达的是这个符号本身。
# 方括号表示法
使用方括号,比如 [xyz]
,可以创建一个字符集合,表示匹配方括号中的任意字符。
比如某学校的学号规定:第 1 位是一个字母,b 表示本科生,y 表示研究生,后面是 7 位数字,用正则表示为:/^[by]\d{7}$/
可以使用短横 -
来指定一个字符范围,^
表示否定
# 量词
# 修饰符
修饰符也叫作标志(flags),用于使用正则表达式实现高级搜索。
修饰符的使用:
# 正则表达式和字符串方法
# 正则表达式相关方法
test()
方法已经使用过了,不多说了。exec()
方法就使用方式如下:
var str = 'abc123def456ghi789';
var regexp = /\d+/;
var result = regexp.exec(str);
2
3
- 第 0 项:查找结果
- index:出现的位置
- input:原始字符串
- groups:分组
这里只超找到一个结果,因为没有使用 g
全局找找。exec()
方法最有趣的是,有 g
修饰符的正则表达式将自动成为“有状态”的,这意味着可以对单个字符串中的多次
匹配结果进行逐条的遍历。
# 字符串相关方法
字符串有哪些方法可以使用正则表达式呢?
var str = 'abc123def4567ghi89';
// search()方法,很像indexOf(),返回查找到的第一个下标,如果找不到就是-1
var result1 = str.search(/\d+/g);
var result2 = str.search(/m/g);
console.log(result1); // 3
console.log(result2); // -1
// match()方法,返回查找到的数组,找不到就是null
var result3 = str.match(/\d+/g);
console.log(result3); // ["123", "4567", "89"]
// replace()方法,进行替换
var result4 = str.replace(/[a-z]+/g, '*'); // 注意+表示贪婪的,尽可能多的连续匹配小写字母
console.log(result4); // *123*4567*89
// split()方法,进行字符串拆为数组
var result5 = str.split(/\d+/g);
console.log(result5); // ["abc", "def", "ghi", ""]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19