ES6 RegExp(正则表达式)包括ES5部分

一 简介

1. 什么是正则表达式?

正则表达式是用于匹配字符串中字符组合的模式。在JS中,正则表达式也是对象。

2. 正则表达式的用途

正则表达式可被用于RegExpexectest方法, 以及 Stringmatchreplacesearchsplit方法。

3. 正则表达式的创建

方法1使用一个正则表达式字面量,其由包含在斜杠之间的模式组成:

/*
   /pattern/flags 
*/

const regex = /ab+c/;

const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;

在加载脚本后,正则表达式字面值提供正则表达式的编译。当正则表达式不变时,使用此方法可获得更好的性能

方法2 调用RegExp对象的构造函数 (如果要使用变量生成正则表达式而非直接指定,建议用这种方法,更清楚)

/* 
    new RegExp(pattern [, flags])
*/

例子

let a = 'abc';
new RegExp(a) //   /abc/

注意 尽量不要用eval() 函数

eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码,非常危险!!!。虽然 eval() 功能非常强大,但实际使用中必须要用到它的情况并不多。

比如:

eval('alert(\'hi\')')  //就能直接在浏览器中弹框提示hi

eval()非常危险(特别是其参数会经过后端或用户返回时),项目中不要用。

4. 匹配模式的特殊字符(pattern,放置在/ /之间)

匹配字符 作用
\ 加在非特殊字符前,表示下一个字符是特殊字符;加在特殊字符前,将其转义为字面量
^ 匹配输入的开头
$ 匹配输入的结束
* 匹配前一个表达式0次或多次,等价于 {0,}。
+ 匹配前面一个表达式1次或者多次。等价于 {1,}
? 匹配前面一个表达式0次或者1次。等价于 {0,1}。
. (小数点)匹配除换行符之外的任何单个字符
(x) 匹配 'x' 并且记住匹配项
(?:x) 匹配 'x' 但是不记住匹配项
x(?=y) 匹配'x'仅仅当'x'后面跟着'y'
x(?!y) 匹配'x'仅仅当'x'后面不跟着'y'
`x y` 匹配‘x’或者‘y’
{n} 匹配了前面一个字符刚好发生了n次
{n,m} 匹配前面的字符至少n次,最多m次
[xyz] 一个字符集合。匹配方括号的中任意字符,包括转义序列。你可以使用破折号(-)来指定一个字符范围。
^[xyz] 一个反向字符集。匹配任何没有包含在方括号中的字符。可使用破折号(-)来指定一个字符范围
\d 匹配一个数字,等价于[0-9]
\D 匹配一个非数字字符,等价于0-9

例如:
/^A/ 并不会匹配 "an A" 中的 'A',但是会匹配 "An E" 中的 'A';

/t$/ 并不会匹配 "eater" 中的 't',但是会匹配 "eat" 中的 't'。

/bo*/会匹配 "A ghost boooooed" 中的 'booooo' 和 "A bird warbled" 中的 'b'

/a+/匹配了在 "candy" 中的 'a',和在 "caaaaaaandy" 中所有的 'a'。

/e?le?/ 匹配 "angel" 中的 'el',和 "angle" 中的 'le' 以及"oslo' 中的'l'

5. 正则的使用

正则表达式可以被用于RegExpexectest方法以及 Stringmatchreplacesearchsplit方法。这些方法在JavaScript 手册中有详细的解释。

方法 描述
exec 在字符串中执行查找匹配RegExp的方法),返回一数组(未匹配到则返null)
test 在字符串中测试是否匹配(RegExp的方法),返回true或false
match 在字符串中执行查找匹配String的方法),返回一个数组或在未匹配到时返null
search 在字符串中测试匹配(String的方法),返回匹配到的位置索引,或者在失败时返回-1
replace 在字符串中执行查找匹配(String的方法),并使用替换字符串替换掉匹配到的子字符串
split 用正则表达式或一个固定字符串分隔一个字符串,并将分隔后子字符串存储到数组中(String的方法)

附:平时开发中用过的正则表达式收集

  1. input或textarea中的输入字符串.replace(/\n/g, '\n').replace(/\t/g, '\t')
    用正则表达式将文本中的空格和换行替换成 \t和\n ,方便后端识别和解析

6. ES6正则的扩展 TODO???

参考

已学习

js正则表达式(MDN)

待学习

正则的扩展(阮一峰《ES6标准入门》)

results matching ""

    No results matching ""