正则表达式必知必会笔记“

  1. 正则表达式查找特定的信息(搜索),查找并编辑特定的信息(替换)。简单地说,正则是一些用来匹配和处理文本的字符串。
  2. 元字符:有特殊含义的字符
  3. 元字符 . 英文句号,可以匹配除换行符以外的任何单个字符,单个的字符、字母、数字甚至是其本身(\.)。
  4. 元字符 [和][] 不匹配任何字符,它们只负责定义一个字符集合
  5. 元字符 - 字符区间,如 0123456789 可用 0-9
    • A-Z 匹配从 A 到 Z 的所有大写字母
    • a-z 匹配从 a 到 z 的所有小写字母
    • A-z 匹配从 ASCII 字符 A 到 ASCII 字符 z 的所有字母。这个模式一般不常用,因为它还包含着[和^等在 ASCII 字符表里排列在 z 和 a 之间的字符]
    • 字符区间的首尾字符可以是 ASCII 字符表里的任意字符。但在实际工作中,最常用的字符区间还是数字字符区间和字母字符区间。
    • 在定义一个字符区间的时候,一定要避免让这个区间的尾字符小于它的首字符。这种区间是没有意义的,而且往往会让这个模式失效
    • 注意 -(连字符) 是一个特殊的元字符,作为元字符,她只能用在[和]之间。在字符集合以外的地方,只是一个普通字符,只能与 - 本身相匹配。因此,在正则里, - 不需要被转义
    • [A-Za-z0-9]匹配任何一个字母(无论大小写)和数字`
  6. ^ 元字符对一个字符集合进行取非匹配
    注意, ^ 的效果将作用域给定字符集合里的所有字符或字符区间,而不是仅限于仅跟随在^后面的那个字符区间

第四章 使用元字符

匹配空白字符

  1. [\b] 回退(并删除)一个字符(Backspace 键)
  2. \f 换页符
  3. \n 换行符
  4. \r 回车符
  5. \t 制表符 (Tab 键)
  6. \v 垂直制表符
  7. \r\n 匹配一个 “回车+换行”组合,有许多操作系统(比如 Windows)都把这个组合作为文本行的结束标签。

匹配数字

  1. \d === [0-9] 任何一个数字字符
  2. \D === [^0-9] 任何一个非数字字符

字母数字元字符

  1. \w === [a-zA-z0-9_] 任何一个字母数字字符或下划线字符
  2. \W === [^a-zA-Z0-9_] 取非

匹配空白字符

  1. \s === [\f\n\r\t\v] 任何一个空白字符
  2. \S === [^\f\n\r\t\v] 任何一个非空白字符

第五章 重复匹配

5.1 有多少个匹配
  1. 匹配一个或多个字符 +
    想要匹配同一个字符(或字符集合)的多次重复,只要简单地给这个字符(或字符集合)加上 + 字符作为后缀就行了,比如 a+ 将匹配一个或多个连续出现的 a。 [0-9]+ 将匹配一个或多个连续的数字
    + 我前面的字符最少出现一次
  2. 匹配零个或多个字符 *
    + 匹配一个或多个字符,但不匹配零个字符。这种匹配需要用 *元字符来完成,* 的用法 和 + 完全一样。
    * 可以理解为 在我前面的字符(或字符集合)是可选的
  3. 匹配零个或一个字符 ?
    ? 前面的字符要么不出现,要么只出现一次

不少程序员喜欢把一个字符也定义为一个集合,这么租窦娥好处是可以增加可读性和避免产生误解,让人们一眼看出哪个字符与哪个元字符相关联。如匹配 http:// https:// 则使用 http[s]?://。而不是 http[s?]:// 那样就会匹配 https:// 或 http?:// 了,即[s?] s 与 ? 问号 是一个 字符集合

5.2 匹配的重复次数
  1. 设定重复次数的语法 {} 和字符 给出,把数值写在它们之间。s{3} 将匹配三个 字符s
    {} 是元字符,匹配本身时 需转义\{\}。其实不转义大部分表达式实现也能正确地处理它们,但不要依赖他们

  2. 为重复匹配次数设定一个区间
    {} 语法还可以用来为重复匹配次数设定一个区间
    {2,4} 最少重复 2 次、最多重复 4 次.注意 {2,4} 之间 没有任何空格

  3. 匹配“至少重复多少次”
    {} 语法 的最后一种用法是给出一个最小的重复次数(但不必给出一个最大值)。
    {3,}表示至少重复 3 次,与之等价的说法是“必须重复 3 次或更多次”

  4. *+ 都是所谓的“贪婪型”元字符,它们在进行匹配时的行为模式是多多益善而不是适可而止的。他们会尽可能地从一段文本的开头一直匹配到这段文本的末尾,而不是从这段文本的开头匹配到碰到第一个匹配时为止。
    在不需要使用这种“贪婪行为”的时候该怎么办?大安市使用这些元字符的“栏遁形”版本(“懒惰”在这里的含义是匹配尽可能少的字符,与“贪婪型”元字符的行为模式刚好相反)。方法是给贪婪型元字符加上一个 ? 后缀即可。 1. **? 2. ++? 3. {n,}{n,}?

第六章 位置匹配

6.1 边界

位置匹配用来解决在什么地方进行字符串匹配操作的问题
\b 匹配的是这样一个位置,这个位置 位于 一个能够用来构成单词的字符(\w)和一个不能用来构成单词的字符(\W)之间
\b 匹配只匹配一个位置,不匹配任何字符。用\bcat\b 匹配到的字符串长度是 3 个字符(c a t) 不是 5 个字符
\B 不匹配一个单词边界,即字母数字下划线之间,或者非字母数字下划线之间

6.2 单词边界

\b 用来匹配一个单词的开始或结尾(boundary 边界)
如果你想披撇一个完整的单词,就必须在你想要匹配的文本的前后都加上\b限定符

/\B-\B/ 匹配 a - b
/\b-\b/ 匹配 a-b


test

1
2
var regex = /hello/;
console.log(regex.test('hello'));

replace

1
2
3
4
5
6
7
'sjn@163.com'.replace(/j(.+)(@)(.\*)/, function(...args) {
console.log(args); // [ 'jn@163.com', 'n', '@', '163.com', 1, 'sjn@163.com' ]
// 匹配到的字符串
// 如果正则使用了分组匹配就为多个否则无此参数。
// 匹配字符串的对应索引位置
// 原始字符串
});

match

1
2
3
var regex = /a[123]b/g;
var string = 'a0b a1b a2b a3b a4b';
console.log(string.match(regex)); // [ 'a1b', 'a2b', 'a3b' ]