# 正则表达式

# 介绍

# 创建

创建一个正则表达式

  • 方法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"]

# matchAll

# replace

# split

陕ICP备20004732号-3