正则就是在常见的字符串检索或替换中表示如何来进行检索或替换的一种规则。正则表达式就是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串

JavaScript中对于正则表达式的支持

JavaScript通过RegExp类型来支持正则表达式。

JavaScript中初始化正则表达式的两种方式:

  • 直接使用字面量的方式
1
var expression = / patterns / flags;

其中模式(patterns)部分可以是任意简单或复杂的正则表达式,可以包含字符类、限定符、分组、向前查找以及反向引用。flags用来表达正则表达式的行为,包括g、i、m三个标志。

  • 使用构造函数的方式
1
new RegExp(patterns,flags);

正则表达式中的三个标志位(flags)

  • g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止;
  • i:表示不区分大小写(ignoreCase)模式,即在确定匹配项时忽略模式与字符串的大小写;
  • m:表示(multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在模式匹配的项。

RegExp的实例属性

  • global:布尔值,表示是否设置了g标志;
  • ignoreCase:布尔值,表示是否设置了i标志;
  • multiline:布尔值,表示是否设置了m标志;
  • source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。

测试用例:
RegExp的实例属性

RegExp的对象方法

  • compile:改变正则的一些规则和属性;
  • exec:RegExp的主要方法。该方法接受一个参数,即要应用模式的字符串,返回包含第一个匹配项信息的数组
  • test:接受一个字符串参数,在模式与该参数匹配的情况下返回true,否则返回false;
  • toString:返回正则表达式的字面量。

测试用例:
对象方法

String类型与正则相关的方法

  • search:返回第一个匹配的索引位置;
  • replace:接收两个参数,一个是匹配正则表达式,一个是替换值;
  • match:返回一个数组,数组中包含了匹配值,匹配值在源字符串首次出现的索引值,以及源字符串;
  • split:返回一个数组,数组中包含了经特殊分隔符分隔后的字符串。

测试用例:
String类型

正则表达式的基础

1、正则基础

正则字符串 含义 测试用例
. 任意字符(除换行符以外:\n,\r,\u2028,\u2029) /…/.test(‘1a@’)
\d 数字0-9 /\d\d\d/.test(‘123’)
\D 非\d,即不是数字0-9的字符 /\D\D\D/.test(‘ab!’)
\w 数字0-9,或a-z及A-Z(大小写),或下划线 /\w\w\w\w/.test(‘aB9_’)
\W 非\w /\W\W\W/.test(‘@!#’)
\s 空格符,Tab, 换页符,换行符 /\sabc/.test(‘ abc’)
\S 非\s
\t,\n,\r,\v,\f tab,回车,换行,垂直制表符,换页符

2、范围符号

正则字符串 含义 测试用例
[…] 字符范围 [a-z][0-9][A-Z0-9a-z]
[^…] 字符范围以外 [^a-z][^abc]
^ 行首 ^abc
\$ 行尾 test$
\b 零宽单词边界 \bno
\B 非\b

3、特殊字符的转义

1
/\^abc/.test('^abc');

4、分组

正则字符串 含义 测试用例
(x) 分组,并记录匹配到的字符串 (abc)
\n 表示使用分组符(x)匹配到的字符串 /(abc)\1/.test(‘abcabc’)
(?:x) 仅分组 /(?:abc)(def)\1/.test(‘abcdefdef’)

5、重复

正则字符串 含义 测试用例
x* ,x+ 重复次数>=0,重复次数>0,贪婪算法 abc*将匹配ab、abc、abccccc,abc+将匹配abc、abccccc不匹配ab
x*?,x+? 同x*,x+,使用非贪婪算法 ab*?在字符串abccccc中将匹配ab,abc+?在abcccc中将匹配abc
x? 出现0或1次 tet
x &#124 y x或者y ab &#124 cd &#124 ef将匹配ab或cd或ef
x{n},x{n,},x{n,m} 重复n次,重复>=n次,重复次数x满足:x>=n&&x<=m a{5}匹配aaaaabb,不匹配aab,a{1,3}匹配a,aa,aaa

参考内容:
1.JavaScript高级编程第三版
2.JavaScript深入浅出