Skip to content

Commit

Permalink
132
Browse files Browse the repository at this point in the history
  • Loading branch information
SK-Luffa committed Aug 21, 2024
1 parent f696850 commit c4d4692
Showing 1 changed file with 67 additions and 0 deletions.
67 changes: 67 additions & 0 deletions docs/src/pages/FixedArticle/JavaScript/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -487,3 +487,70 @@ fn(1,2) // this指向window
- bind是返回绑定this之后的函数,apply、call则是立即执行
# 正则表达式
## 什么是正则表达式?
正则表达式是用来匹配字符串的强有力的规则
- 它的设计思想是一种描述性的语言定义一个规则,凡是符合规则的字符串,我们就认为它匹配了,否则改字符串就是不合法的
在JavaScript中,正则表达式也是对象,构建正则表达式有两种方式:
1. 字面量创建,其由包含在斜杠之间的模式组成
```js
const re=/\d+/g;
```
2. 调用RegExp对象的构造函数
```js
const re=new RegExp("\\d","g")
const rul='\\d+'
const re1=new RegExp(rul,'g')
```
- 使用构建函数创建,第一个参数可以是一个变量,遇到特殊字符“\”需要使用“\\”进行转义
## 匹配规则

常见的校验规则如下:

| 规则 | 描述 |
| ----------- | ----------------------------------------------------- |
| \ | 转义 |
| ^ | 匹配输入的开始 |
| $ | 匹配输入的结束 |
| * | 匹配前一个表达式 0 次或多次 |
| + | 匹配前面一个表达式 1 次或者多次。等价于 `{1,}` |
| ? | 匹配前面一个表达式 0 次或者 1 次。等价于`{0,1}` |
| . | 默认匹配除换行符之外的任何单个字符 |
| x(?=y) | 匹配'x'仅仅当'x'后面跟着'y'。这种叫做先行断言 |
| (?<=y)x | 匹配'x'仅当'x'前面是'y'.这种叫做后行断言 |
| x(?!y) | 仅仅当'x'后面不跟着'y'时匹配'x',这被称为正向否定查找 |
| (?<!*y*)*x* | 仅仅当'x'前面不是'y'时匹配'x',这被称为反向否定查找 |
| x\|y | 匹配‘x’或者‘y’ |
| `{n}` | n 是一个正整数,匹配了前面一个字符刚好出现了 n 次 |
| `{n,} ` | n是一个正整数,匹配前一个字符至少出现了n次 |
| `{n,m}` | n 和 m 都是整数。匹配前面的字符至少n次,最多m次 |
| [xyz\] | 一个字符集合。匹配方括号中的任意字符 |
| [^xyz\] | 匹配任何没有包含在方括号中的字符 |
| \b | 匹配一个词的边界,例如在字母和空格之间 |
| \B | 匹配一个非单词边界 |
| \d | 匹配一个数字 |
| \D | 匹配一个非数字字符 |
| \f | 匹配一个换页符 |
| \n | 匹配一个换行符 |
| \r | 匹配一个回车符 |
| \s | 匹配一个空白字符,包括空格、制表符、换页符和换行符 |
| \S | 匹配一个非空白字符 |
| \w | 匹配一个单字字符(字母、数字或者下划线) |
| \W | 匹配一个非单字字符 |

### 正则表达式标记

| 标志 | 描述 |
| :--- | :-------------------------------------------------------- |
| `g` | 全局搜索。 |
| `i` | 不区分大小写搜索。 |
| `m` | 多行搜索。 |
| `s` | 允许 `.` 匹配换行符。 |
| `u` | 使用`unicode`码的模式进行匹配。 |
| `y` | 执行“粘性(`sticky`)”搜索,匹配从目标字符串的当前位置开始。 |

### 贪婪模式
在了解贪婪模式之前,首先举个例子
```js
const reg=/ab{1,3}c/
```
在匹配过程中,尝试可能的顺序是从多往少的方向去尝试,首先会尝试`bbb` ,然后再看整个正则是否能匹配,不能匹配时,吐出一个`b`,即在`bb`的基础上在进行尝试,以此重复

0 comments on commit c4d4692

Please sign in to comment.