各符号含义

符号 含义
* 零到多次
+ 一到多次
? 零次或者一次
. 除了\n以外的任意字符
{n} 出现 n 次
{n,} 出现 n 到多次
{n,m} 出现 n 到 m 次
\d 匹配一个数字,等价于[0-9]
\D 大写D匹配一个非数字字符,等价于[^0-9]
\w 匹配字母、数字或者下划线,等价于[A-Za-z0-9]
\W 大写W表示非字母且数字,与\w相反,等价于[^a-zA-Z0-9]
\s 小写s表示匹配一个空字符,包括空格,换行,回车,tab,等价于[\n\r\t\f]
\S 大写S匹配非空格字符,与\s相反,等价于[^\n\r\t\f]
[] 中括号用来表示一个字符集合,^[]中表示匹配任何不在该集合中的字符
{} 大括号的作用是指重复前面一个字符多少遍,例{N}:重复n遍;{n,m}:重复n~m遍;{n, }:至少重复n遍;{,m}:最多重复m遍

() [] {}的区别

符号 含义
() ()的作用是提取匹配的字符串。表达式中有几个()就会得到几个相应的匹配字符串。比如(\s+)表示连续空格的字符串
[] []是定义匹配的字符范围。比如[a-zA-Z0-9]表示字符文本要匹配英文字符和数字
{} {}一般用来表示匹配的长度,比如\d{3}表示匹配三个数字,\d{1,3}表示匹配1~3个数字,\d{3,}表示匹配3个以上数字

关于空格

符号 含义
\s 空格
\uFEFF ES5新增的空白符,叫字节次序标记字符(Byte Order Mark),也就是BOM
\xA0 禁止自动换行空白符,相当于html中的 
“”,”\x20”,”\u0020” 半角空格符,键盘空格键
“\t”,”\x09”,”\u0009” 制表符,键盘tab键
“\v”,”\x0B”,”\u000B” 垂直制表符
“\f”,”\x0C”,”\u000C” 换页符
“\r”,”\x0D”,”\u000D” 回车符
“\n”,”\x0A”,”\u000A” 换行符

对于IE低版本,\s等价于[\t\v\f\r\n]
例子:

  1. trimpolyfill
  2. if(!String.prototype.trim) {
  3. String.prototype.trim = function() {
  4. return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,'');
  5. };
  6. }

解析:

  • []表示范围
  • ^表示行的开头,$表示行的结束
  • +代表前面的字符必须至少出现一次(1次或多次)

    修饰符

  • i:忽略大小写

  • g:全局模式
  • m:多行模式,表示查找到一行文本末尾时会继续查找
  • y:黏附模式,表示只查找从 lastIndex 开始及之后的字符串
  • u:Unicode 模式,启用 Unicode 匹配
  • s:dotAll 模式,表示元字符 . 匹配任何字符(包括 \n 或 \r)

元字符

  1. ( [ { \ ^ $ | ) ] } ? * + .

属性

  • flags:返回正则表达式的修饰符。
  • sticky:表示是否设置了y修饰符。
  • unicode:表示是否设置了u修饰符。
  • global:布尔值,表示是否设置了g修饰符。
  • ignoreCase:布尔值,表示是否设置了i标志。
  • lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起。
  • multiline:布尔值,表示是否设置了m标志。
  • source:正则表达式的字符串表示。

    方法

    exec

    用于配合捕获组使用,这个方法只接收一个参数,即要应用模式的字符串。
    返回值:
    如果找到了匹配项,则返回包含第一个匹配信息的数组;如果没找到匹配项,则返回 null 。返回的数组虽然是 Array 的实例,但包含两个额外的属性:index 和 input 。index 是字符串中匹配模式的起始位置, input 是要查找的字符串。这个数组的第一个元素是匹配整个模式的字符串,其他元素是表达式中的捕获组匹配的字符串。如果模式中 没有捕获组,则数组只包含一个元素。

    test

    接收一个字符串参数。如果输入的文本与模式匹配,则返回 true ,否则返回 false 。

    断言

先行断言

x只有在y前面才匹配,必须写成/x(?=y)/

先行否定断言

x只有不在y前面才匹配,必须写成/x(?!y)/

后行断言

x只有在y后面才匹配,必须写成/(?<=y)x/

后行否定断言

x只有不在y后面才匹配,必须写成/(?<!y)x/

具名组匹配

允许为每一个组匹配指定一个名字,既便于阅读代码,又便于引用。

“具名组匹配”在圆括号内部,模式的头部天剑“问号+尖括号+组名”(?<year>),然后就可以在exec方法返回结果的groups属性上引用该组名。

字符串替换时,使用$<组名>引用具名组。

  1. let re = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/u;
  2. '2015-01-02'.replace(re, '$<day>/$<month>/$<year>')
  3. // '02/01/2015'