首页 > 代码库 > 正则表达式学习

正则表达式学习

From:http://www.imooc.com/video/12539
 
测试正则的网站:https://regexper.com/
 
 
修饰符:
  1. g:global全文搜索,不添加,搜索到第一个匹配停止。
  2. i:ignore case 忽略大小写,默认大小写敏感。
  3. m:multiple lines 多行搜索。
  4. lastIndex:当前表达式匹配内容的最后一个字符的下一个位置
  5. source:正则表达式的文本字符串
 
正则表达式有2种基本字符类型组成:
  1. 原义文本字符(比如:abc)
  2. 元字符(比如:\b)。元字符是正则表达式中有特殊含义的非字母字符 (.*+?^.|\(){}[])
 
元字符:
  1. \t:水平制表符
  2. \v:垂直制表符
  3. \n:换行符
  4. \r:回车符
  5. \0:空字符
  6. \f:换页符
 
字符类:
  1. [abc]:构建一个简单的类(比如:‘a1b2c3d4‘.replace(/[abc]/g,‘X‘) =》X1X2X3d4)
  2. [^abc]:取反
 
范围类:
  1. [a-z]:从a到z的任意字符,包含a和z。(比如:‘a1b2c3d4aa‘.replace(/[a-z]/g,‘X‘) =》X1X2X3X4XX)
  2. [a-zA-Z]:在[]组成的类内部可以连写的。
  3. [a,z]:分割(‘12345678‘.replace(/[1,3]/g,‘A‘) =》A2A45678)
 
预定义类:
  1. .:除了回车符和换行符之外的所有字符([^\r\n])
  2. \d:数字字符([0-9])
  3. \D:非数字字符([^0-9])
  4. \s:空白符([\t\n\x0B\f\r])
  5. \S:非空白符([^\t\n\x0B\f\r] )
  6. \w:单词字符,包含字符、数字、下划线([a-zA-Z_0-9])
  7. \W:非单词字符([^a-zA-Z_0-9 ])
 
边界匹配字符:
  1. ^:以xxx开始(‘@123@abc@a‘.replace(/^@./g,‘X‘) =》X23@abc@a)
  2. $:以xxx结束(‘@123@abc@a‘.replace(/@.$/g,‘X‘) =》@123@abcX)
  3. \b:单词边界
  4. \B:非单词边界
 
量词:
  1. ?:出现0次或1次
  2. +:出现1次或多次
  3. *:出现0次或多次
  4. {n}:出现n次
  5. {n,m}:出现n到m次
  6. {n,}:至少出现n次
 
贪婪模式:正则表达式会尽可能多的匹配,直到匹配失败。(‘12345678‘.replace(/\d{3,6}/g,‘A‘) =》A78)
非贪婪模式:尽可能少的匹配。在量词后面加上?即可。(‘12345678‘.replace(/\d{3,6}?/g,‘A‘) =》AA78)
 
分组:
  1. 使用()可以达到分组的功能,使量词作用于分组(‘a1b2c3d4‘.replace(/(\w\d){3}/g,‘X‘) =》Xd4)
  2. 或|(‘a1b2c3d4‘.replace(/(a1|b2)/g,‘X‘) =》XXc3d4)
 
反向引用(‘2017-05-06‘.replace(/(\d{4})-(\d{2})-(\d{2})/g,‘$2/$3/$1‘) =》05/06/2017)
 
忽略分组:不希望捕获某些分组,只需要在分组内加上?:就可以
 
前瞻:在正则表达式匹配到规则的时候,向前检查是否符合断言,后顾方向相反,JS不支持后顾。
  1. 正向前瞻:exp(?=assert)(‘a2*3‘.replace(/\w(?=\d)/g,‘X‘) =》X2*3)
  2.  负向前瞻:exp(?!assert)
  3. 正向后顾:exp(?<=assert),JS不支持。
  4. 负向后顾:erp((?<!assert),JS不支持。
 
test(str):用于测试字符串参数中,是否存在匹配正则表达式模式的字符串。(var reg1 = /\w/; reg1.test(‘a‘);//true)
exec(str):使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果。
如果没有匹配的文本则返回null,否则返回一个结果数组:index 声明匹配文本的第一个字符的位置,input 存放呗检索的字符串string

正则表达式学习