Skip to content

Latest commit

 

History

History
133 lines (112 loc) · 3.45 KB

01正则表达式字符匹配攻略.md

File metadata and controls

133 lines (112 loc) · 3.45 KB

第一章 正则表达式字符匹配攻略

正则表达式是匹配模式,要么匹配字符,要么匹配位置

1.两种模糊匹配

  • 横向模糊匹配:/ab{2,5}c/
  • 纵向模糊匹配:/a[123]b/

2.字符组

  • 范围: [123456abcdefGHIJKLM] 等于 [1-6a-fG-M]
  • 排除: [^abc]

常见字符组

  • \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]。 非空白符。
  • .:表示 [^\n\r\u2028\u2029]。通配符,表示几乎任意字符。换行符、回车符、行分隔符和段分隔符 除外
  • [\d\D]、[\w\W]、[\s\S] 、[^]:表示任意

3.量词

  • {m,}:表示至少出现 m 次
  • {m,}:等价于 {m,m},表示出现 m 次
  • ?:等价于 {0,1},表示出现或者不出现
  • +:等价于 {1,},表示出现至少一次
  • *:等价于 {0,},表示出现任意次,有可能不出现

3.1 贪婪匹配

尽可能多的匹配

var regex = /\d{2,5}/g;
var string = "123 1234 12345 123456";
console.log( string.match(regex) );
// => ["123", "1234", "12345", "12345"]

3.2 惰性匹配

尽可能少的匹配,公式:惰性匹配 = 量词 + 问号

惰性量词 贪婪量词
{m,n}? {m,n}
{m,}? {m,}
?? ?
+? +
*? *
var regex = /\d{2,5}?/g;
var string = "123 1234 12345 123456";
console.log( string.match(regex) );
// => ["12", "12", "34", "12", "34", "12", "34", "56"]

4.分支

或关系,惰性

var string = "goodbye";

var regex1 = /good|goodbye/g;
console.log( string.match(regex1) );
// => ["good"]

var regex2 = /goodbye|good/g;
console.log( string.match(regex2) );
// => ["goodbye"]

5.应用

5.1 匹配 16 进制颜色值

字符可以出现 3 或 6 次

// 例如:
// #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"]

5.2 匹配时间

// 23:59
// 02:07

var regex = /^([01][0-9]|[2][0-3]):([0-5][0-9])$/

5.3 匹配日期

// 2017-06-10

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

##5.4 window 操作系统文件路径

// F:\study\javascript\regex\regular expression.pdf
// F:\study\javascript\regex\
// F:\study\javascript
// F:\

var regex = /^[a-zA-Z]:\\([^\\:*<>|"?\r\n/]+\\)*([^\\:*<>|"?\r\n/]+)?$/;
console.log( regex.test("F:\\study\\javascript\\regex\\regular expression.pdf") );
console.log( regex.test("F:\\study\\javascript\\regex\\") );
console.log( regex.test("F:\\study\\javascript") );
console.log( regex.test("F:\\") );
// => true
// => true
// => true
// => true

5.4 匹配 id

var string = '<div id="container" class="main"></div>';

var regex1 = /id=".*?"/
console.log(string.match(regex1)[0]);
// => id="container"

var regex2 = /id="[^"]*"/
console.log(string.match(regex2)[0]);
// => id="container"

参考