# 正则表达式
# 介绍
# 创建
创建一个正则表达式
- 方法1:使用一个正则表达式字面量,其由包含在斜杠之间的模式组成,如下所示
var re = /ab+c/;
- 方法2:调用
RegExp对象
的构造函数
var re = new RegExp("ab+c");
# 特殊字符
- ^: 匹配开头
- $: 配置结尾
- ?: 匹配前面一个表达式 0 次或者 1 次
- *: 匹配前一个表达式 0 次或多次
- +: 匹配前面一个表达式 1 次或者多次
- \s: 匹配一个空白字符,包括空格、制表符、换页符和换行符
- \w: 匹配一个单字字符(字母、数字或者下划线)
[A-Za-z0-9_]
# API
# exec
一个在字符串中执行查找匹配的 RegExp 方法,它返回一个数组(未匹配到则返回 null)
在设置了 global 或 sticky 标志位的情况下(如 /foo/g or /foo/y),JavaScript RegExp 对象是有状态的
。他们会将上次成功匹配后的位置记录在 lastIndex 属性中。使用此特性,exec()
可用来对单个字符串中的多次匹配结果进行逐条的遍历(包括捕获到的匹配)
如果匹配成功,exec() 方法返回一个数组(包含额外的属性 index 和 input ,参见下方表格),并更新正则表达式对象的 lastIndex 属性。完全匹配成功的文本将作为返回数组的第一项,从第二项起,后续每项都对应正则表达式内捕获括号里匹配成功的文本。
如果匹配失败,exec() 方法返回 null,并将 lastIndex 重置为 0
var myRe = /ab*/g;
var str = 'abbcdefabh';
var myArray;
while ((myArray = myRe.exec(str)) !== null) {
var msg = 'Found ' + myArray[0] + '. ';
msg += 'Next match starts at ' + myRe.lastIndex;
console.log(msg);
}
// Found abb. Next match starts at 3
// Found ab. Next match starts at 9
const paragraph = 'The quick brown fox jumps over the lazy dog. It barked.';
const regex = /[A-Z]/g;
const found = regex.exec(paragraph);
console.log(found); //0: "T"
const found = regex.exec(paragraph); //再次执行
console.log(found); //1: "I"
# test
一个在字符串中测试是否匹配的 RegExp 方法,它返回 true 或 false
如果正则表达式设置了全局标志,test() 的执行会改变正则表达式 lastIndex属性。连续的执行test()方法,后续的执行将会从 lastIndex 处开始匹配字符串 和 exec方法类似
const str = 'table football';
const regex = new RegExp('foo*');
const globalRegex = new RegExp('foo*', 'g');
console.log(regex.test(str));
// expected output: true
console.log(globalRegex.lastIndex);
// expected output: 0
console.log(globalRegex.test(str));
// expected output: true
console.log(globalRegex.lastIndex);
// expected output: 9
console.log(globalRegex.test(str));
// expected output: false
# match
返回一个字符串匹配正则表达式的结果
const paragraph = 'The quick brown fox jumps over the lazy dog. It barked.';
const regex = /[A-Z]/g;
const found = paragraph.match(regex);
console.log(found); //Array ["T", "I"]