什么是正则表达式
什么是正则表达式
-
正则表达式(
regular expression)描述了字符串的“构成模式”,经常被用于检查字符串是否符合预定的格式要求 -
正则表达式“按位”描述规则,是指它是一位一位的描述字符串的构成形式
比如检查字符串是不是这样的:以字母m开头,然后是3个数字,最后以字母n结尾/^m\d\d\dn$/
// 定义正则表达式
// 6位数字的字符串
var regexp = /^\d{6}$/;
var str1 = '123456';
var str2 = '1234567';
var str3 = '12c4567';
console.log(regexp.text(str1)); // true
console.log(regexp.text(str2)); // false
console.log(regexp.text(str3)); // false
正则表达式的基本使用
1、正则表达式的创建
-
使用
/内容/的语法形式,可以快速创建正则表达式 -
也可以使用
new RegExp('内容')的形式,创建正则表达式 -
使用
typeof运算符检查正则表达式的类型,结果是object
2、元字符
- “元字符”是指一位指定类型的字符
| 元字符 | 功能 |
|---|---|
\d | 匹配一个数字 |
\D | 匹配一个非数字字符 |
\w | 匹配一个单字字符(字母、数字或者下划线) |
\W | 匹配一个非单字字符 |
\s | 匹配一个空白字符,包括空格、制表符和换行符 |
. | 任意字符 |
- 开头和结尾
| 元字符 | 功能 |
|---|---|
^ | 匹配开头 |
$ | 匹配结尾 |
- 如果使用
new RegExp()写法,反斜杠需要多写一个进行转义
比如/^\d$/和new RegExp('^\\d$')是相同的意思
3、方括号表示法
-
使用方括号,比如
[xyz],可以创建一个字符集合,表示匹配方括号中的任意字符 -
可以用短横-来制定一个字符范围,^表示否定
| 元字符 | 等价的方括号表示法 |
|---|---|
\d | [0-9] |
\D | [^0-9] |
\w | [A-Za-z0-0_] |
\W | [^A-Za-z0-0_] |
4、量词
| 量词 | 意义 |
|---|---|
* | 匹配前一个表达式0次或多次。等价于{0,} |
+ | 匹配前一个表达式1次或多次。等价于{1,} |
? | 匹配前一个表达式0次或1次。等价于{0,1} |
{n} | n是一个正整数,匹配前面一个字符刚好出现了n次 |
{n,} | n是一个正整数,匹配前面一个字符至少出现了n次 |
{n,m} | n和m都是正整数,匹配前面的字符至少n次,最多m次 |
()圆括号可以整体表示
5、修饰符
- 修饰符也叫做标志(
flags),用于使用正则表达式实现高级搜索
var re = /m/gi;
var re = new RegExp('m', 'gi');
| 修饰符 | 意义 |
|---|---|
i | 不区分大小写搜索 |
g | 全局搜索 |
正则表达式和字符串
正则表达式的相关方法
- 正则表达式可以“打点”调用的方法
| 方法 | 简介 |
|---|---|
text() | 测试字符串是否匹配正则表达式,返回布尔值 |
exec() | 根据正则表达式,在字符串中进行查找,返回结果数组或者null |
exec()方法的逐条遍历
var str = 'abc123def456ghi789';
var regexp = /\d+/; // 注意没有开头和结尾,+表示贪婪的,尽可能多的寻找
// 使用循环语句循环执行exec,寻找所有的匹配结果,正则表达式必须加g,给执行语句加状态,不加值查询一次
var result;
while (result = regexp.exec(str)) {
console.log(result);
}
字符串的相关方法
- 字符串有哪些方法可以使用正则表达式
| 方法 | 简介 |
|---|---|
search() | 在字符串中根据正则表达式进行查找匹配,返回首次匹配到的位置索引,测试不到则返回-1 |
match() | 在字符串中根据正则表达式进行查找匹配,返回一个数组,找不到返回null |
replace() | 使用替换字符串替换掉匹配到的子字符串,可以使用正则表达式 |
split() | 分割字符串为数组,可以使用正则表达式 |
var str = 'abc123def4567';
var regexp = /\d+/g;
// search()方法,很像indexOf()
var result1 = str.search(regexp);
console.log(result1); // 3 是出现的位置索引
// match()方法
var result2 = str.match(regexp);
console.log(result2); // ["123", "4567"]
// replace()方法
var result3 = str.replace(/[a-z]+/g, '*'); // 注意+表示贪婪的,尽可能多的连续匹配小写字母
console.log(result3); // *123*4567
// split()方法
var result4 = str.split(/\d+/g);
console.log(result5); // ["abc", "def"]
正则表达式的应用
正则表达式的应用
- 用正则表达式进行表单验证是正则表达式最重要的实际应用