51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

JavaScript - 正则表达式

正则表达式是一种强大的文本处理工具,用于匹配字符串中的特定模式。在 JavaScript 中,正则表达式被广泛用于字符串的搜索、替换、验证等操作。


正则表达式 {#%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F}

>简介 {#%3E%E7%AE%80%E4%BB%8B}

  • 正则表达式用来定义一个规则

  • 通过这个规则计算机可以检查一个字符串是否符合规则,或者将字符串中符合规则的内容提取出来。

  • 正则表达式也是JS中的一个对象,所以要使用正则表达式,需要先创建正则表达式的对象。

创建 new RegExp() {#%E5%88%9B%E5%BB%BA-new-regexp()}

 // new RegExp() 可以接收两个参数(字符串) 1.正则表达式 2.匹配模式
let reg = new RegExp("a", "i") // 通过构造函数来创建一个正则表达式的对象
let reg = /a/i

let reg = new RegExp("a", "i")let reg = /a/i 这两行代码定义了一个正则表达式 reg,它匹配字母 "a",并且忽略大小写(由于使用了 "i" 标志)。

字面量 xx = /?/ {#%E5%AD%97%E9%9D%A2%E9%87%8F-xx-%3D-%2F%3F%2F}

// 使用字面量来创建正则表达式:/正则/匹配模式
let reg = /\w/

let reg = /\w/ 这行代码将 reg 重新定义为匹配任何字母、数字或下划线的正则表达式(\w 是一个字符类)。

let reg = new RegExp("\\w")
    reg = new RegExp("a") // /a/ 表示,检查一个字符串中是否有a

reg = new RegExp("\\w") 这行代码将 reg 重新定义为匹配任何字母、数字或下划线的正则表达式。在 JavaScript 中,字符串中的反斜杠是一个转义字符,所以我们需要使用两个反斜杠 \\ 来表示一个实际的反斜杠。因此,"\\w" 在正则表达式中表示 \w,它是一个字符类,匹配任何字母、数字或下划线。

reg = new RegExp("a") 这行代码将 reg 重新定义为匹配字母 "a" 的正则表达式。

// 通过正则表达式检查一个字符串是否符合规则
let str = "a"

let result = reg.test(str) // true


    result = reg.test("b") // false
    result = reg.test("abc") // true
    result = reg.test("bcabc") // true

    reg = /a/
    console.log(result);</code></pre>



 
`let str = "a"` 这行代码定义了一个字符串 `str`,内容为 "a"。

 
`let result = reg.test(str)` 这行代码使用正则表达式 `reg` 测试字符串 `str`,并将结果存储在 `result` 中。由于 `reg` 最后被定义为匹配 "a",所以 `result` 为 `true`。

 
`result = reg.test("b")` 这行代码测试字符串 "b",由于 "b" 不匹配 "a",所以 `result` 为 `false`。

 
`result = reg.test("abc")` 这行代码测试字符串 "abc",由于字符串中包含 "a",所以 `result` 为 `true`。

 
`result = reg.test("bcabc")` 这行代码测试字符串 "bcabc",由于字符串中包含 "a",所以 `result` 为 `true`。

 
`reg = /a/` 这行代码将 `reg` 重新定义为匹配字母 "a" 的正则表达式。

 
`console.log(result)` 这行代码输出 `result` 的值。由于前面的测试结果是 `true`,所以控制台将输出 `true`。

 
### \>语法 {#%3E%E8%AF%AD%E6%B3%95}


 
>   
> #### 大部分字符都可以直接写 {#%E5%A4%A7%E9%83%A8%E5%88%86%E5%AD%97%E7%AC%A6%E9%83%BD%E5%8F%AF%E4%BB%A5%E7%9B%B4%E6%8E%A5%E5%86%99}
>
>
>  

 
```javascript
let re = /ab/
let result = re.test('abc')

```


 
>   
> #### \| 在正则表达式中表示或 {#%7C-%E5%9C%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B8%AD%E8%A1%A8%E7%A4%BA%E6%88%96}
>
>
>  

 
```javascript
let re = /abc|bcd/
let result = re.test('c') //false

```


 
>   
> #### \[\] 表示或(字符集) {#%5B%5D-%E8%A1%A8%E7%A4%BA%E6%88%96%EF%BC%88%E5%AD%97%E7%AC%A6%E9%9B%86%EF%BC%89}
>
>
>  

 

  
* \[a-z\] 任意的小写字母



  
* \[A-Z\] 任意的大写字母



  
* \[a-zA-Z\] 任意的字母



  
* \[0-9\]任意数字



 

 
```javascript
let re = /[ab]/ 
    re = /[a-z]/i    //匹配模式i 表示忽略大小写
let result = re.test('c') //false
let result = re.test('a') //true

```


 
>   
> #### \[\^\] 表示除了 {#%5B%5E%5D-%E8%A1%A8%E7%A4%BA%E9%99%A4%E4%BA%86}
>
>
>  

 

  
* \[\^x\] 除了x



 

 
```javascript
let re = /[^a-z]/   //匹配包含小写字母以外内容的字符串
let result = re.test('c') //false
let result = re.test('aH') //true

```


 
>   . 表示除了换行外的任意字符
>
>  

 
```javascript
let re = /./ 
let result = re.test('aH') //true

```


 
>   
> #### 在正则表达式中使用\\作为转义字符 {#%E5%9C%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B8%AD%E4%BD%BF%E7%94%A8%5C%E4%BD%9C%E4%B8%BA%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6}
>
>
>  

 
```javascript
let re = /\./   //表示只匹配.
let result = re.test('c') //false

```


 
>   
> #### 其他的字符集 {#%E5%85%B6%E4%BB%96%E7%9A%84%E5%AD%97%E7%AC%A6%E9%9B%86}
>
>
>  

 

  
* \\w 任意的单词字符 \[A-Za-z0-9_\]



 

 

<!-- -->


  
* \\W 除了单词字符 \[\^A-Za-z0-9_\]



  
* \\d 任意数字 \[0-9\]



  
* \\D 除了数字 \[\^0-9\]



  
* \\s 空格



  
* \\S 除了空格



  
* \\b 单词边界



  
* \\B 除了单词边界



 

 
>   
> #### 开头和结尾 {#%E5%BC%80%E5%A4%B4%E5%92%8C%E7%BB%93%E5%B0%BE}
>
>
>  

 

  
* \^ 表示字符串的开头


  ```javascript
  let re = /^a/   //表示匹配开始位置的a
  let result = re.test('c') //false

  ```



  
* $ 表示字符串的结尾


  ```javascript
  let re = /a$/   //表示匹配结束位置的a
      re = /^a$/ //完全匹配,只匹配字母a,要求字符串必须和正则完全一致
  let result = re.test('a') //true
  console.log(result)

  ```



 

 
### \>量词 {#%3E%E9%87%8F%E8%AF%8D}


 
>   
> #### {m} 正好m个 {#%7Bm%7D-%E6%AD%A3%E5%A5%BDm%E4%B8%AA}
>
>
>  

 
```javascript
let re = /a{3}/ 
    re = /^ab{3}$/ //实际上匹配的是 abbb
    re = /^(ab){3}$/
let result = re.test("aaa") // true

```


 
>   
> #### {m,} 正少m个 {#%7Bm%2C%7D-%E6%AD%A3%E5%B0%91m%E4%B8%AA}
>
>
>  

 
```javascript
let re = /^(ab){1,}$/ 

```


 
>   
> #### {m,n} 正少m-n个 {#%7Bm%2Cn%7D-%E6%AD%A3%E5%B0%91m-n%E4%B8%AA}
>
>
>  

 
```javascript
let re = /^(ab){1,3}$/ 

```


 
>   
> #### + 一个以上,相当于{1,} {#%2B-%E4%B8%80%E4%B8%AA%E4%BB%A5%E4%B8%8A%EF%BC%8C%E7%9B%B8%E5%BD%93%E4%BA%8E%7B1%2C%7D}
>
>
>  

 
```javascript
let re = /^ba+$/ 

```


 
>   
> #### \* 任意数量 {#*-%E4%BB%BB%E6%84%8F%E6%95%B0%E9%87%8F}
>
>
>  

 
```javascript
let re = /^ba*$/ 

```


 
>   
> #### ? 0-1次,相当于{0,1} {#%3F-0-1%E6%AC%A1%EF%BC%8C%E7%9B%B8%E5%BD%93%E4%BA%8E%7B0%2C1%7D}
>
>
>  

 
```javascript
let re = /^ba?$/ 

```


 
### \>exec方法 {#%3Eexec%E6%96%B9%E6%B3%95}


 
获取字符串中符合正则表达式的内容

 
>   g表示全局匹配
>
>  

 
```javascript
let str = "abcaecafcacc"

// 提取出str中符合axc格式的内容


// g表示全局匹配
let re = /a((\[a-z\])c)/ig


let result = re.exec(str)


//    console.log(result)

`while(result){
console.log(result[0], result[1], result[2])
result = re.exec(str)
}`

```


<br />



 
>   
> #### 小练习 {#%E5%B0%8F%E7%BB%83%E4%B9%A0}
>
>
>  

 
```javascript
/* 
    dajsdh13715678903jasdlakdkjg13457890657djashdjka13811678908sdadadasd

    用自己的语言来把描述出来
        1    3         501789087
        1    3到9之间   任意数字 x 9




\*/


let re = /1\[3-9\]\\d{9}/g


re = /(1\[3-9\]\\d)\\d{4}(\\d{4})/g


let str =
"dajsdh13715678903jasdlakdkjg13457890657djashdjka13811678908sdadadasd"


let result


while (result = re.exec(str)) {
// console.log(result\[0\], result\[1\], result\[2\])
console.log(result\[1\] + "\*\*\*\*" + result\[2\])
}


re = /\^1\[3-9\]\\d{9}$/

`console.log(re.test("13456789042"))`

```


<br />



 
### \>字符串 {#%3E%E5%AD%97%E7%AC%A6%E4%B8%B2}


 
>   
> #### split( ) 根据正则表达式对一个字符串拆分 {#split(-)-%E6%A0%B9%E6%8D%AE%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%AF%B9%E4%B8%80%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%8B%86%E5%88%86}
>
>
>  

 
```javascript
let str = "孙悟空abc猪八戒abc沙和尚"
let result = str.split(/a[bc]c/)
console.log(result) // (3) ['孙悟空', '猪八戒', '沙和尚']

```


 
>   
> #### search( ) 搜索第一次在符合正则表达式的内容出现的位置 {#search(-)-%E6%90%9C%E7%B4%A2%E7%AC%AC%E4%B8%80%E6%AC%A1%E5%9C%A8%E7%AC%A6%E5%90%88%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E5%86%85%E5%AE%B9%E5%87%BA%E7%8E%B0%E7%9A%84%E4%BD%8D%E7%BD%AE}
>
>
>  

 
```javascript
let str = "dajsdh13715678903jasdlakdkjg13457890657djashdjka13811678908sdadadasd"
let result = str.search(/1[3-9]\d{9}/)
console.log(result) // 6

```


 
>   
> #### replace( ) 根据正则表达式替换字符串中的指定内容 {#replace(-)-%E6%A0%B9%E6%8D%AE%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%9B%BF%E6%8D%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E6%8C%87%E5%AE%9A%E5%86%85%E5%AE%B9}
>
>
>  

 
```javascript
let result = str.replace(/1[3-9]\d{9}/g, "哈哈哈")

```


 
>   
> #### match( ) 根据正则表达式去匹配字符串中符合要求的内容 {#match(-)-%E6%A0%B9%E6%8D%AE%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%8E%BB%E5%8C%B9%E9%85%8D%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%AC%A6%E5%90%88%E8%A6%81%E6%B1%82%E7%9A%84%E5%86%85%E5%AE%B9}
>
>
>  

 
```javascript
let str = "dajsdh13715678903jasdlakdkjg13457890657djashdjka13811678908sdadadasd"
let result = str.match(/1[3-9]\d{9}/g)
console.log(result) // (3) ['13715678903', '13457890657', '13811678908']

```


 
>   
> #### matchAll() 根据正则表达式去匹配字符串中符合要求的内容(必须设置g 全局匹配) {#matchall()-%E6%A0%B9%E6%8D%AE%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%8E%BB%E5%8C%B9%E9%85%8D%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%AC%A6%E5%90%88%E8%A6%81%E6%B1%82%E7%9A%84%E5%86%85%E5%AE%B9(%E5%BF%85%E9%A1%BB%E8%AE%BE%E7%BD%AEg-%E5%85%A8%E5%B1%80%E5%8C%B9%E9%85%8D)}
>
>
>   
> 它返回的是一个迭代器
>
>  

 
```javascript
let result = str.matchAll(/1[3-9]\d{9}/g)
for(let item of result){
    console.log(item)
}

```


 
### \>垃圾回收 {#%3E%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6}


 
和生活一样,生活时间长了以后会产生生活垃圾。程序运行一段时间后也会产生垃圾。

 
>   在程序的世界中,什么是垃圾?
>
>   
>
>    
> * 如果一个对象没有任何的变量对其进行引用,那么这个对象就是一个垃
>
>
>
>    
> * 垃圾对象的存在,会严重的影响程序的性能
>
>
>
>    
> * 在JS中有自动的垃圾回收机制,这些垃圾对象会被解释器自动回收,我们无需手动处理
>
>
>
>    
> * 对于垃圾回收来说,我们唯一能做的事情就是将不再使用的变量设置为null

>
>
>   
>  

 
```javascript
let obj = {name:"孙悟空"}
let obj2 = obj
`obj = null
obj2 = null`

```


<br />



 
<br />



赞(0)
未经允许不得转载:工具盒子 » JavaScript - 正则表达式