Javascript正则表达式总结

8/4/2021 正则表达式

# Javascript正则表达式总结

在Javascript中,正则表达式也是对象。

  1. # 正则表达式概念

  • 正则表达式是由一个字符序列形成的搜索模式。
  • 当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。
  • 正则表达式可以是一个简单的字符,或一个更复杂的模式。
  • 正则表达式可用于所有文本搜索和文本替换的操作。

在Javascript中,正则表达式也是对象。可以使用两种方法来构建正则表达式;

  1. 使用一个正则表达式字面量,其由包含在斜杠之间的模式组成;
  2. 调用RegExp对象的构造函数;
let re1 = /ab+c/;
let re2 = new RegExp("ab+c");
re1 instanceof RegExp; // true
re2 instanceof RegExp; // true
1
2
3
4

涉及方法:
RegExp包含exec,test方法,String包含matchmatchAllreplacesearchsplit方法;

# 贪婪非贪婪

默认情况下,正则表达式量词如*、+、都是贪婪匹配,所谓贪婪匹配,就是尽可能匹配多的字符
当在量词后面加一个?就可以实现非贪婪匹配,即尽可能匹配少的字符

let str = "Hello, My name is will wei.";
/M.+/.exec(str)[0]; // "My name is will wei." 贪婪匹配,M后面尽可能多的字符
/M.+?/.exec(str)[0]; // "My" 非贪婪匹配,M后面尽可能少的字符
1
2
3

# 分组和捕获

分组是用圆括号“()”括起来的正则表达式,匹配出的内容就表示一个分组。

  • (exp): 分组,并捕获该分组匹配到的文本;
  • (?:exp): 分组,但不捕获该分组匹配到的文本
    当一个正则表达式被分组后。每个分组被自动赋予一个组号,从左到右分别是12...分组,又称为子表达式。
let reg1 = /^(\d{4})[/-](\d{1,2})[/-](\d{1,2})$/;
console.log('2020/8/1'.replace(reg1,'$1年$2月$3日')) // 2020年8月1日
console.log('2020-8-1'.replace(reg1,'$1年$2月$3日')) // 2020年8月1日
// 不捕获天
let reg2 = /^(\d{4})[/-](\d{1,2})[/-](?:\d{1,2})$/;
console.log('2020/8/1'.replace(reg1,'$1年$2月$3日')) // 2020年8月$3日
console.log('2020-8-1'.replace(reg1,'$1年$2月$3日')) // 2020年8月$3日
1
2
3
4
5
6
7

# 断言

用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。
前瞻断言

  • (?=exp)顺序肯定环境,表示所在位置右侧能够匹配exp
  • (?!exp)顺序否定环境,表示所在位置右侧不能匹配exp
    后瞻断言
  • (?<=exp)逆序肯定环境,表示所在位置左侧能够匹配exp
  • (?<!exp>)逆序否定环境,表示所在位置左侧不能匹配exp
let str = "Hello, My name is will wei.";
/w(?=ei)/.exec(str).index; // 21,匹配到的是wei中的w
/w(?!ei)/.exec(str).index; // 18,匹配到的是will中的w
/(?<=H)e/.exec(str).index; // 1,匹配到的是Hello中的w
/(?<!H)e/.exec(str).index; // 13,匹配到的是name中的e
1
2
3
4
5