Regular

原因:2018年3月9日 笔记
说明:读书笔记

1.1 两种模糊匹配

1.1.1 横向模糊匹配

  • 一个正则可匹配的字符串的长度不是固定的
  • 比如正则 /ab{2,5}c/ 表示匹配这样一个字符串:第一个字符是 “a”,接下来是 2 到 5 个字符 “b”,最后 是字符 “c”。

1.1.2 纵向模糊匹配

  • 一个正则匹配的字符串,具体到某一位字符时,它可以不是某个确定的字符,可以有多种 可能。
  • 比如 /a[123]b/ 可以匹配如下三种字符串: “a1b”、”a2b”、”a3b”。

1.2 字符组

1.2.1 范围表示法

  • 当字符组里的字符特别多,可用”-“进行连接,比如 [123456abcdefGHIJKLM],可以写成 [1-6a-fG-M]。用连字符 - 来省略和简写。
  • 要匹配 “a”、”-“、”z” 这三者中任意一个字符,可以写成如下的方式:[-az] 或 [az-] 或 [a-z]。

1.2.2 排除字符组

  • 纵向模糊匹配还有一种情况,某位字符可以是任何东西,但就不能是 “a”、”b”、”c”。
  • 此时就可以使用排除字符组[^abc]来表示,该符号为脱字符

1.2.3 常见的简写形式

字符组 字符含义
\d [0-9]
\D [^0-9]
\w [0-9a-zA-Z_] 数字、字母、下划线
\W [^0-9a-zA-Z_] 非单词词组
\s [\t\v\n\r\f] 空白符
\S [^\t\v\n\r\f] 非空白符
. 通配符
  • 使用 [\d\D]、[\w\W]、[\s\S] 和 [^] 中任何的一个可表示匹配任意字符

1.3 量词

1.3.1 简写形式

量词 具体形式
{m,} 至少出现m次
{m} 出现m次
? 等价于{0,1} 表示出现或者不出现
+ 等价于{1,} 表示至少出现一次
* 等价于{0,} 表示出现任意次

1.3.2 贪婪匹配与惰性匹配

  • 贪婪匹配,尽可能多的匹配 /\d{2,5}/g
  • 惰性匹配,尽可能少的匹配 /\d{2,5}?/g

1.4 多选分支

  • 一个模式可以实现横向和纵向模糊匹配。而多选分支可以支持多个子模式任选其一。
  • 多选分支是惰性的,当前面匹配时,后面的就不会尝试了。
var regex = /goodbye|good/g; var string = "goodbye";
console.log( string.match(regex) );
// => ["goodbye"]

1.5 案例分析

1.5.1 匹配16进制颜色

  • 要求匹配#ffbbad #Fc01DF #FFF #ffE
var regex = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g;
var string = "#ffbbad #Fc01DF #FFF #ffE";
console.log( string.match(regex) );
// => ["#ffbbad", "#Fc01DF", "#FFF", "#ffE"]

1.5.2 匹配时间

  • 要求匹配时间
var regex = /^([01][0-9]|[2][0-3]):[0-5][0-9]$/;
console.log( regex.test("23:59") );
console.log( regex.test("02:07") );
// => true // => true

1.5.3 匹配日期

  • 匹配yyyy-mm-dd
var regex = /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/; 
console.log( regex.test("2017-06-10") );
// => true
文章目录
| | 65.4k