1.1 基本概念
正则表达式( Regular Expression )是用于匹配字符串中字符组合的模式。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。
基本规则
符号 | 作用 |
---|---|
[a-z] | 中括号表示1个字符,- 表示一个范围。所有的小写字母 |
[xyz] | x或y或z中任何一个字符 |
[^xyz] | 如果用在中括号中,表示取反。除了xyz之外的所有字符 |
\d | digital 表示1个数字 |
\w | 表示1个单词字符,相当于:[a-zA-Z0-9_] |
. | 通配符表示任意字符,如果只匹配点号。要转义 \. |
() | 用于分组 |
{n} | 表示前面的字符出现n次 |
{n,} | 表示前面的字符出现大于等于n次 >=n |
{n,m} | 表示前面的字符出现大于等于n,小于等于m |
+ | 表示前面的字符出现1~n次 |
***** | 表示前面的字符出现0~n次 |
? | 表示前面的字符出现0~1次 |
| | 表示或者,几个或几组字符中出现1个 |
^ | 用于正则表达式开头,表示匹配开始 |
$ | 用于正则表达式结尾,表示匹配结束 |
1.2 正则基本特点
- 灵活性、逻辑性和功能性非常的强。
- 可以迅速地用极简单的方式达到字符串的复杂控制。
- 在JS中默认是模糊匹配,只要包含正则表达式就可以。如果要精确匹配,前面应该加上^,后面加上$。
正则表达式 | 匹配字符串 |
---|---|
\d{3} | 包含3个数字即可: a123b |
^\d{3} | 以3个数字开头: 123b |
\d{3}$ | 以3个数字结尾:a123 |
ab{2} | a后面出现2次b : abb |
ab{2,} | a 后面出现2次及以上的b: abb 或者abbb 或者 abbbb |
ab{3,5} | a 后面出现3~5 次的b: abbb或者abbbb 或者 abbbbb |
ab+ | a后面出现1~n次b : ab 或者 abb 或者abbb |
ab* | a后面出现0~n次b : ab 或者 abb 或者abbb |
ab? | a 后面出现 0~1次b: a 或者ab |
hi|hello | 字符串里面有hi 或者hello |
(b|cd)ef | 表示bef或者cdef |
^.{3}$ | 表示有任意三个字符的字符串 |
[^a-zA-Z] | 中括号内部的^,表示不出现,既不出现: 大小写字母 |
1.3 js中的使用
在 JavaScript 中,可以通过两种方式创建一个正则表达式。
方式一:通过调用RegExp对象的构造函数创建
var regexp = new RegExp(/123/);
console.log(regexp);
方式二:利用字面量创建 正则表达式
var rg = /123/;
测试正则表达式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试正则表达式</title>
</head>
<body>
<script>
// 1. 利用 RegExp对象来创建 正则表达式
let regexp = new RegExp(/123/);
console.log(regexp);
// 2. 利用字面量创建 正则表达式
let rg = /123/;
// 3.test 方法用来检测字符串是否符合正则表达式要求的规范
console.log(rg.test(123));
console.log(rg.test('abc'));
</script>
</body>
</html>
执行结果
1.4 表达式操作
正则表达式匹配
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>正则表达式匹配</title>
</head>
<body>
<script type="text/javascript">
// 定义字符串
let str = "123abc456";
// 指定匹配的规则
let reg = new RegExp("A", "i");
let res = reg.test(str);
// 输出结果
console.log(res); // true
</script>
</body>
</html>
提取字符串
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>提取字符串</title>
</head>
<body>
<script type="text/javascript">
// 1.定义字符串
let str = "abc2020-1-11def2019-11-11fdjsklf";
// 2.默认情况下在正则表达式中一旦匹配就会停止查找 /g表示查到最后
let reg = /\d{4}-\d{1,2}-\d{1,2}/g
let res = str.match(reg);
// 输出结果
console.log(res);
console.log(res[0]);
console.log(res[1]);
</script>
</body>
</html>
执行结果
替换字符串
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>替换字符串</title>
</head>
<body>
<script type="text/javascript">
// 定义字符串str
let str = "abc2020-1-11def2019-11-11fdjsklf";
let reg = /\d{4}-\d{1,2}-\d{1,2}/g
let newStr = str.replace(reg, "guardwhy");
// 输出结果
console.log(str);
console.log(newStr);
</script>
</body>
</html>
执行结果