[javascript权威指南][阅读笔记]八

时间:2022-08-27 08:26:59

第十章   正则表达式的模式匹配


  1. 正则表达式是一个描述字符模式的对象
  2. 使用正则表达式可以进行强大的模式匹配以及文本的检索和替换
  3. RegEx直接量和对象的创建:ES3规范,用正则表达式创建的RegExp对象会共享一个实例,ES5则是两个独立的实例
  4. 直接量字符:\o Nul字符;\t 制表符;\n 换行符;\v 垂直制表符;\f 换页符;\r 回车符;\xnn 由十六进制数nn指定的拉丁字符;\uxxxx 由十六进制数xxxx指定的unicode字符;\cX 控制字符^X
  5. 字符类:将直接量字符单独放进方括号内就组成了字符类(character class)。一个字符类可以匹配它所包含的任意字符
  6. 可以通过^符号来定义否定字符类,它匹配所有不包含在方括号内的字符
  7. [...]    ——方括号内的任意字符
  8. [^...]   ——不在方括号内的任意字符
  9. .         ——除换行符和其他unicode行终止符之外的任意字符
  10. \w       ——任何ASCII字符组成的单词,相当于[a-zA-Z0-9]
  11. \W      ——任何不是ASCII字符组成的单词,相当于[^a-zA-Z0-9]
  12. \s        ——任何unicode空白符
  13. \S        ——任何非unicode空白符的字符,注意区分\w和\S
  14. \d        ——任何ASCII数字,相当于[0-9]
  15. \D       ——除了ASCII数字之外的任何字符,相当于[^0-9]
  16. [\b]    ——退格直接量(特例)
  17. 注意,方括号内也可以写这些特殊转义字符,退格符特例
  18. 重复
  19. {n,m}:匹配前一项n次,但不能超过m次
  20. {n,}:匹配前一项n次或更多次
  21. {n}:匹配前一项n次
  22. ?:匹配前一项0或1次,相当于{0,1}
  23. +:匹配前一项1或多次,相当于{1,}
  24. *:匹配前一项0或多次,相当于{0,}
  25. 非贪婪的重复:以上匹配都是尽可能多的匹配,称之为贪婪匹配。也可以进行非贪婪匹配,只需在正则表达式后边加上一个问号?
  26. 选择、分组和引用:指定选择项 + 子表达式分组 +引用前一子表达式的特殊字符
  27. |:选择,匹配的是左边或右边的子表达式
  28. (...):组合,将几个项组合成一个单元,单元可通过*,+,?,|等符号修饰,而且可以记住和这个组合相匹配的字符串以供此后的引用使用
  29. (?:...):只组合,不记忆
  30. \n:和第n个分组第一次匹配到的字符相匹配,组是圆括号中的子表达式,也有可能是嵌套的
  31. 选择项的尝试匹配次序是从左到右
  32. 正则表达式中的圆括号的作用:1、把单独的项组合成子表达式;2、在完整的模式中定义子模式;3、允许在同一正则表达式中引用前面的子表达式
  33. 通过在\后加一位或多位数字,如\1引用的是第一个带括号的子表达式。注意,子表达式可以嵌套子表达式,所以它的位置是参与计数的左括号的位置
  34. 正则表达式不允许双引号内容中包含单引号,反之亦然
  35. 指定匹配位置
  36. ^:匹配字符串的开头,在多行的检索中,匹配一行的开头
  37. $:匹配字符串的结尾,在多行的检索中,匹配一行的结尾
  38. \b:匹配一个单词的边界
  39. \B:匹配非单词边界的位置
  40. (?=p):零宽正向先行断言
  41. (?!p):零宽负向先行断言
  42. 修饰符
  43. i:执行不区分大小写的匹配
  44. g:执行全局匹配,即找到所有匹配
  45. m:多行匹配模式,^和$匹配一行或字符串的开头或结尾
  46. 用于模式匹配的String方法
  47. search():返回第一个匹配的子串的起始位置或-1。若参数不是正则,则转换为正则。不支持全局检索,忽略修饰符g
  48. replace():检索和替换。$加数字可以替换相应的子表达式匹配的文本。第二个参数可以是函数
  49. match():返回完整匹配和子表达式匹配
  50. split():拆分成数组
  51. RegEx对象:exec()和test()