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


10.1 正则表达式的定义

  • 正则表达式直接量为包含在一对斜杠(/)之间的字符。
  • ES3规定,同一段代码所表示的正则表达式直接量会返回同一个RegExp对象。
  • ES5规定,同一段代码所表示的正则表达式直接量每次都会返回一个新对象。

10.1.1 直接量字符

  • 反斜杠(\)用以转义

10.1.2 字符类

[...]  方括号内的任意字符                        [^...]  除了方括号内的任意字符
.      除了换行符和行终止符以外的任意字符
\w   等价于[a-zA-Z0-9]                           \W  等价于[^a-zA-Z0-9]
\s    任意空白符
\d   等价于[0-9]

10.1.3 重复

{n,m}  匹配前一项至少n次,不超过m次
{n,}     匹配前一项n次或以上
{n}      匹配前一项n次
?      等价于{0,1}
+       等价于{1,}
*        等价于{0,}

使用*和?必须谨慎,因为它们允许什么都不匹配。

非贪婪的匹配
  • 在待匹配的字符串后加一个问号(?)可以尽可能少地匹配。
  • 正则表达式的模式匹配总是会寻找字符串中第一个可能匹配的位置。

10.1.4 选择、分组和引用

  • 选择:“|”
  • "()"的多种作用
    • 组合 /(ab+cd)+|ef/
    • 定义子模式 /[a-z]+(\d+)/
    • 在同一正则表达式的后部引用前面的子表达式(是与被引用子表达式相匹配的文本的引用)。 "\"加上数字来指定子表达式(数字是参与计数的左括号的位置)
  • "(?: ...)"只用于组合,不记忆与改组匹配的字符。

10.1.5 指定匹配位置

^  匹配开头
$   匹配结尾
\b  匹配单词的边界
\B  匹配非单词边界的地方
(?=p)  接下来的字符串与p匹配
(?!=p) 接下来的字符串不与p匹配

10.1.6 修饰符

修饰符放“//”后面。

i  不区分大小写
g 全局匹配,找到所有的匹配
m 多行匹配(^匹配字符串的开头和行开头,$匹配字符串的结尾和行结尾)

10.2 用于模式匹配的String方法

String拥有的和正则表达式匹配相关的方法
  • search() 返回第一个与之匹配的子串的起始位置,没有则返回-1
  • replace() 检索替换
    • 单纯的字符串替换(可单个可全局)
    • 替换字符串中含有$加数字,用指定的子表达式匹配的文本替换
    • 第二个参数可以是函数
  • match() 返回字符串的匹配结果
    • 全局:返回包含所有匹配结果的数组
    • 单个:返回数组的第一个元素是第一个匹配结果,其他元素是子表达式
    解析URL的正则表达式:/(\w+):\/\/([\w.]+)\/(\S*)/
    
  • split() 拆分字符串

10.3 RegExp对象

10.3.1 RegExp的属性

  • source 包含正则表达式的文本(String)
  • global 说明是否全局匹配(Boolean)
  • ignoreCase 说明是否不区分大小写(Boolean)
  • multiline 说明是否多行匹配(Boolean)
  • lastIndex 下一次搜索的开始位置(被exec函数和test函数利用)

10.3.2 RegExp的方法

  • exec()
    • 效果和返回结果类似String.match() ,但只返回一个匹配结果,因而可重复调用
    • 返回结果的属性包括index(发生匹配的位置)和input(正在检索的字符串)
  • test()
    • 同exec()可重复调用

你可能感兴趣的:(第10章 正则表达式的模式匹配)