- 正在表达式(Regular expression) 描述了 字符串的“构成模式”,经常被用于检查字符串是否符合预定的格式要求
- 正则表达式“按位”描述规则,是指它是一位一位的描述字符串的构成形式
- 使用 /内容/ 的语法形式,可以快速创建正则表达式
- 也可以使用 new RegExp(‘内容’) 的形式,创建正则表达式
- 使用 typeof 运算符检查正则表达式的类型,结果是 object
// 用正则表达式表示6位数字
// 创建正则表达式方式1
var regExp1 = /^\d{6}$/;
// 创建正则表达式方式2
// 这里的第一个斜杠表示将第二个斜杠转义
var regExp2 = new RegExp('^\\d{6}$');
var str1 = '13r432';
var str2 = '2313412';
var str3 = '235672';
console.log(regExp1.test(str1)); // false
console.log(regExp1.test(str2)); // false
console.log(regExp1.test(str3)); // true
console.log(regExp2.test(str1)); // false
console.log(regExp2.test(str2)); // false
console.log(regExp2.test(str3)); // true
console.log(typeof regExp1); // object
console.log(typeof regExp2); // object
- “元字符”是指一位指定类型的字符
- 如果使用 new RegExp() 写法,反斜杠需要多写一个,表示对反斜杠进行转义
- 比如 \/^\d\$\/ 和 new regExp('^\d\$') 是相同意思
元字符 |
功能 |
\d |
匹配一个数字 |
\D |
匹配一个非数字字符 |
\w |
匹配一个单字字符(字母、数字或者下划线) |
\W |
匹配一个非单字字符 |
\s |
匹配一个空白字符,包括空格、制表符和换行符 |
. |
任意字符 |
^ |
表示匹配的开头 |
$ |
表示匹配的结尾 |
- 在特殊字符之前的反斜杠 \ 表示下一个字符不是特殊字符,应该按字面意思理解 |
|
- 不管一个字符有没有特殊意义,都可以在其之前加上一个 反斜杠 \ 以确保它表示的是这个符号本身 |
|
// 检查字符是不是任意字符
/^.$/
// 检查字符是不是一个点
/^\.$/
// 检查字符是不是一个反斜杠
/^\\$/
- 使用方括号,比如[xyz],可以创建一个字符集合,表示匹配方括号中的任一字符
- 可以使用 短横 - 来指定一个字符范围,^ 表示否定
元字符 |
等价的方括号表示法 |
\d |
[0-9] |
\D |
[^0-9] |
\w |
[A-Za-z0-9_] |
\W |
[^A-Za-z0-9_] |
### 4、量词 |
|
量词 |
意义 |
-------- |
------- |
* |
匹配前一个表达式 0 次或多次。等价于 |
+ |
匹配前一个表达式 1 次或者多次。等价于 |
? |
匹配前一个表达式 0 次或者 1 次。等价于 |
{n} |
n 是一个正整数,匹配前一个字符刚好出现 n 次 |
{n, } |
n 是一个正整数,匹配前一个字符至少出现 n 次 |
{n, m} |
n 和 m 都是一个正整数,匹配前一个字符至少出现 n 次,最多出现 m 次 |
- 修饰符也叫作标志(flags),用于使用正则表达式实现高级搜索
修饰符 |
意义 |
i |
不区分大小写搜索 |
g |
全局搜索 |
- 修饰符的使用 |
|
var re = /m/gi;
var re = new RegExp('m', 'gi');
- 正则表达式可以打点调用的方法
- test() 方法用来 测试某字符串是否匹配此正则表达式,它返回 true 或 false
- exec() 方法功能是:在一个指定字符串中执行搜索匹配查找,返回一个结果数组或 null
- exec() 方法最有趣的是,有“g”修饰符的政治表达式将成为“有状态”的,这意味着可以对单个字符串中的多次匹配结果进行 逐条的遍历
方法 |
简介 |
test() |
测试某字符串是否匹配正则表达式,返回布尔值 |
exec() |
根据正则表达式,在字符串中进行查找,返回结果数组或者 null |
var str = "abc123def456ghi789";
var regexp = /^\d+$/g;
// 使用循环来循环执行 exec() 方法,寻找所有匹配的结果
var result;
while(result = regexp.exec(str)) {
console.log(result[0]); // 123 456 789
}
方法 |
简介 |
search() |
在字符串中根据正则表达式进行匹配,返回首次匹配到的位置索引,测试不到则返回 -1 |
match() |
在字符串中根据正则表达式进行查找匹配,返回一个数组,找不到则返回 null |
replace() |
使用替换字符串替换掉匹配到的子字符串,可以使用正则表达式 |
split() |
分割字符串为数组,可以使用正则表达式 |
var str = "abc123def4567ghi89";
// search() 方法,很像 indexOf()
var result1 = str.search(/\d+/g);
var result2 = str.search(/m/g);
console.log(result1); // 3
console.log(result2); // -1
// match() 方法
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",""]