《正则表达式必知必会》读书笔记

匹配单个字符串

  • “ . ”来匹配任意单个字符
  • 需要找“ . ”本身使用“\.”,"\"为特殊字符序列的开头

匹配一组字符串

  • 匹配多个字符中的某一个

    • 使用“ [ ”“ ] ” 来定义一个字符集合

  • 利用字符集和区间

    • [0-9] 和 [A-Z] 和 [A-Za-z0-9]

  • 取非匹配

    • [^0-9a-b] 注意:" ^ " 是作用于整个区间,而非紧跟后面的

使用元字符

  • 匹配空白字符

    • \B —— 回退并删除一个字符(BackSpace键)\
    • \f —— 换页符
    • \n —— 换行符
    • \r —— 回车符
    • \t —— tab符
    • \v —— 垂直tab符

  • 匹配数字

    • \b —— 任意一个数字字符(等价于[0-9])
    • \D —— 任意一个非数字字符(等价于[^0-9])

  • 匹配字母和数字(与非字母和数字)

    • \w —— 任意一个字母(大小写都可),数字,下划线(等价于[a-zA-Z0-9_])
    • \W —— 任意一个非字母,数字或非下划线的字符(等价于[^a-zA-Z0-9_])

  • 匹配空白字符(于非空白字符)

    • \s —— 任意一个空白字符(等价于[\f\n\r\t\v])
    • \S —— 任意一个非空白字符(等价于[^\f\n\r\t\v])

  • 匹配十六进制货八进制数值

  • 使用POSIX字符类 (javascript不支持)

重复匹配

  • 匹配一个或多个字符

    • 使用 “ + ” 表示同一个字符(或字符集合)的多次重复, 至少需要匹配一个字符。
    • 字符集合中的元字符会被解析为普通字符,例如:[\w.] 等价于 [\w.]

  • 匹配零个或多个字符

    • 使用 “ * ” 表示同一个或多个字符(或字符集合)的多次重复。
    • 可以把 “ * ” 理解为 “在我前面的字符或字符集合是可选的”
    • “ + ”“ * ” 区别是前者至少需要匹配一个字符,后者可以不出现

  • 匹配零个或多个字符

    • 使用 “ ? ” 表示同一个字符(或字符集合)的零次或一次出现。

匹配的重复次数

  • 为重复匹配的次数设定一个精确的值

    • 使用“ { ”“ } ” 来为前面一个字符(或字符集合)重复匹配次数设定一个精确的值。
    • 例子: [3] [1] [2]
    • 正则: (\[\d\]){3}

  • 为重复匹配次数设定一个区间

    • 使用“ { ”“ } ” 来为前面一个字符(或字符集合)重复匹配次数设定一个区间的值。
    • 例子:
      • [3] [1] [2]
      • myArray[0]
    • 正则: (\[\d\]){1,3}

  • 匹配 “至少重复多少次”

    • 例子:
      • [3] [1] [2]
      • myArray[0]
    • 正则: (\[\d\]){1,}

  • 匹配 贪婪型元字符 和 懒惰型元字符
    • 贪婪型元字符 : 懒惰型元字符

      • : *?
      • : +?
    • {n,} : {n,}?

    • 例子:需要取得元素标签

      • BK and cK
    • 正则: <[Bb]>.*?

位置匹配

  • 单词边界
    • 使用 ** \b ** 来匹配一个单词的开始或结尾
      ** \b ** 匹配这样的一个能构成单词的字符(字母,数字和下划线),等同于 ** \w **
    • 例子:
      The cat acattered his food all over the room
    • 正则:\bcat\b
    • 输出:cat

    • 使用 ** \B ** 表示不匹配一个单词的边界
      等同于 ** \W **

  • 字符串边界
    • 使用 ** ^ ** 定义字符串的开头
    • 例子:
      this is bad
    • 正则: ^\s*<\?xml.*\?> //对合法的空白自负做出妥善处理

    • 使用 ** (?m) ** 开启分行模式
      分行模式吧分隔符当做一个字符串分隔符来对待
      有许多正则表达不支持分行模式
    • 例子:
      //a
      //b
    • 正则: (?m)^\s*//.*$

子表达时

  • 使用 ** “( ” ** 和 ** “ ) ” ** 来表示子表达式
    • 例子:
      1983-03-13
    • 正则:(19|20)\d{2}

  • 使用子表达式的嵌套,应该按照先內后外的原则进行

回朔引用:前后一致匹配

  • 使用 ** \数字 ** 表示表达式的后半部分引用在前半部分中定义的子表达式,可以想象变成变量
    • 例子:
      of of and and
    • 正则:[ ]+(\w+)+[ ]+\1
  • 替换模式 P85 需要继续了解

前后查找

  • 正向前查找 ** ?= **
  • 正向后查找 ** ?<= **
  • 负向前查找 ** ?! **
  • 负向后查找 ** ?<! **

javascript的正则 附录

  • exec:匹配 RegEx
  • match:匹配 字符串
  • replace:替换 字符串
  • split:分拆
  • search:测试指定的字符串是否匹配字符串的方法
  • test: 测试指定的字符串是否匹配RegEx的方法

javascript 命令行注意点

  • g:激活全局搜索功能
  • i:匹配不分字母大小写
  • m:多行字符串
  • s:单行字符串
  • x:忽略空表字符
  • $':将返回被匹配字符串前面的所有东西
  • $`:将返回被匹配字符串后面你的所有东西
  • $&:将返回被匹配到的所有东西
posted @ 2014-03-05 17:54  责约果  阅读(207)  评论(0编辑  收藏  举报