正则表达式学习总结

281 阅读3分钟

创建方式

字面量创建方式

 var reg = /pattern/flags;

实例创建方式

 var reg = new RegExp(pattern, flags);

字面量创建方式和构造函数创建方式的区别:

1.字面量创建方式不能进行字符串拼接,实例创建方式可以

var regParam = 'cm';
var reg1 = new RegExp(regParam+'1');  // /cm1/
var reg2 = /regParam/;   // /regParam/ 

2.字面量创建方式特殊含义的字符不需要转义,实例创建方式需要转义

var reg1 = new RegExp('\d');  //    /d/ 
var reg2 = new RegExp('\\d')  //   /\d/
var reg3 = /\d/;              //  /\d/

修饰符

i   ignoreCase 忽略大小写
g   global 全局匹配
m   multiline 多行匹配

元字符

匹配位置

^     匹配字符串的开始
$     匹配字符串的结束
\b    匹配单词的开始或结束
\B    匹配非单词边界
\G    上一个匹配的结尾(本次匹配开始)
\A    字符串开头(类似^,但不受处理多行选项的影响)
\Z    字符串结尾或行尾(不受处理多行选项的影响)
\z    字符串结尾(类似$,但不受处理多行选项的影响)

组和范围

\     在非特殊字符之前的反斜杠表示下一个字符是特殊的
|     逻辑或操作符
[]    定义一个字符集合,匹配字符集合中的一个字符,在字符集合里面像 .,\这些字符都表示其本身
[^]   对上面一个集合取非
-     定义一个区间,例如[A-Z],其首尾字符在 ASCII 字符集里面;若-出现在最后,则匹配字符-
()    分组,将相关的元素归拢,构成单个元素;多选结构,(...|...),规定可能出现的多个子表达式;引用分组,存储子表达式匹配文本,供之后引用。

匹配字符

.     匹配除了换行符之外的任何单个字符
\d    0~9任意一个数字
\D    非0~9之间的任意字符
\w     匹配字母、数字、下划线
\W	匹配非字母、数字、下划线
\S	匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
\s	匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]
\t   Tab
\n   换行符
\r   回车符
\f   换页符
\e   Esc
\v   垂直制表符

量词

*	 重复零次或更多次 >=0
+	 重复一次或更多次 >=1
?	 重复零次或一次 0|1
{n}	 重复n次
{n,}	 重复n次或更多次
{n,m}	 重复n到m次

断言

x(?=y)  向前断言, x 被 y 跟随时匹配 x
x(?!y)  向前否定断言, x 没有被 y 跟随时匹配 x
(?<=y)x 向后断言, x 跟随 y 的情况下匹配 x
(?<!y)x 向后否定断言, x 不跟随 y 时匹配 x

就因为这三个知识点,我彻底学废了”正则表达式“
JS正则表达式完整教程(略长)

反向引用

\1匹配的是所获取的第1个()匹配的引用。例如,/(\d)\1/ 匹配两个连续数字字符,如33aa 中的33
\2 匹配的是所获取的第2个()匹配的引用

RegExp 对象属性

lastIndex    一个整数,标示开始下一次匹配的字符位置。		
source	     正则表达式的源文本。

RegExp 对象方法

test

test接受一个字符串参数,如果正则表达式与指定的字符串匹配返回 true 否则返回 false

let reg = /^Hello/

reg.test('Hello World') // => true
reg.test('Say Hello') // => false

exec

exec同样接受一个字符串为参数,返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。

let reg = /([a-z])\d+/
let str = 'a233'
let result = reg.exec(str)   // ["a233", "a", index: 0, input: "a233"] 

// 0:"a233" 表示我们捕获到的字符串
// 1:"a" 表示我们捕获到的分组字符串
// index:0 表示捕获开始位置的索引
// input 表示原有的字符串

var reg = new RegExp("a(bc)")
var str = "3abc4,5abc6" 
reg.exec(str) // ['abc', 'bc', index: 1, input: '3abc4,5abc6', groups: undefined]

exec 方法受参数 g 的影响。若指定了 g,则下次调用 exec 时,会从上个匹配的 lastIndex 开始查找。 

var str = "1a1b1c"
var reg = new RegExp("1.", "")
reg.exec(str)[0] // 1a
reg.exec(str)[0] // 1a

var str = "1a1b1c"
var reg = new RegExp("1.", "g")
reg.exec(str)[0]  // 1a
reg.exec(str)[0]  // 1b