正则表达式快速入门

正则表达式的引擎分为三种:NFADFAPOSIX NFA
JavaScript 使用的是 NFA 的正则表达式引擎,因为只有 NFA 才支持忽略优先量词。至于什么是【忽略优先量词】,往下看就明白了。


字符组简记
  • \d = [0-9] - 数字
  • \D = [^0-9] - 非数字字符
  • \w = [a-zA-Z0-9_] - 单词字符
  • \s = [ \f\n\r\t\v] - 空白字符,例如:空格、换行符、制表符(tab)等
  • \W & \S - 大家可以自己猜一下
锚点(匹配的是位置)
  • ^ - 匹配开头的位置
  • $ - 匹配结尾的位置
  • \b
  • \B
环视(一种比较复杂的锚点)
  • (?=...) - 顺序环视
  • (?!...) - 否定顺序环视,又叫排除环视
  • JS 目前还不支持逆序环视
分组、捕获、条件
  • (...) - 用于分组捕获
  • (?:...) - 用于分组,但不捕获
  • \1,\2 - 用于引用分组捕获的子表达式,\1 就是第一组括号捕捉到的子表达式
  • (?..) - 命名捕获,JS 不支持
  • (?>...) - 固化捕获,JS 不支持
  • | - 多选结构,类似或(or)的意思
优先量词
  • *、+、?、{min, max} - 限制匹配次数(贪婪模式,尽可能多的匹配)
  • *?、+?、??、{min, max}? - 忽略优先量词,同样是限制匹配次数,但是尽可能少的匹配
  • *+、++、?+、 {min, max}+ - 占有优先量词,恩,反正 JS 不支持
常用正则表达式
// 替换重复单词
'test test'.replace(/([a-z]+)\s+\1/ig, '$1')
// 先来先服务原则,请下面的正则匹配的 $1 是什么值
'Copyright 2003'.match(/^.*([0-9]+)/)
// 答案:3

你可能感兴趣的:(正则表达式快速入门)