ES6 RegExp(正则表达式)包括ES5部分
一 简介
1. 什么是正则表达式?
正则表达式是用于匹配字符串中字符组合的模式。在JS中,正则表达式也是对象。
2. 正则表达式的用途
正则表达式可被用于RegExp
的 exec
和 test
方法, 以及 String
的 match
、replace
、search
和 split
方法。
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. 正则的使用
正则表达式可以被用于RegExp
的exec
和test
方法以及 String
的match
、replace
、search
和split
方法。这些方法在JavaScript 手册中有详细的解释。
方法 | 描述 |
exec |
在字符串中执行查找匹配(RegExp的方法),返回一数组(未匹配到则返null) |
test |
在字符串中测试是否匹配(RegExp的方法),返回true或false |
match |
在字符串中执行查找匹配(String的方法),返回一个数组或在未匹配到时返null |
search |
在字符串中测试匹配(String的方法),返回匹配到的位置索引,或者在失败时返回-1 |
replace |
在字符串中执行查找匹配(String的方法),并使用替换字符串替换掉匹配到的子字符串 |
split |
用正则表达式或一个固定字符串分隔一个字符串,并将分隔后子字符串存储到数组中(String的方法) |
附:平时开发中用过的正则表达式收集
input或textarea中的输入字符串.replace(/\n/g, '\n').replace(/\t/g, '\t')
用正则表达式将文本中的空格和换行替换成 \t和\n ,方便后端识别和解析