從給出的文本中,按照既定的相關規則,匹配出符合的數據,其中的規則就是正則表達式,使用正則表達式,可以使得我們用簡潔的代碼就能實現一定復雜的邏輯,比如判斷一個郵箱賬號是否符合正常的郵箱賬號,再比如判斷一個手機號是否正常的手機號,等等,正因為有了正則,得以讓文本處理起來更加的簡單。
日常開發中主要用來做三件事 : 匹配、替換、提取。
- 手機號表單要求用戶只能輸入11位的數字 (匹配)
- 過濾掉頁面內容中的一些敏感詞(替換)
- 從字符串中獲取我們想要的特定部分(提取)等
基本使用?
???基礎步驟;
- 定義正則
- 使用正則
- 定義正則
// 方式 1:簡寫
const res1: RegExp = /ArkTS/// 方式 2:通過實例化的方式創建
const reg2: RegExp = new RegExp('ArkTS')
?1. 使用正則
- test()方法 用來查看正則表達式與指定的字符串是否匹配
- 如果正則表達式與指定的字符串匹配 ,返回true,否則false
console.log('web:', res.test('ArkTS')) // trueconsole.log('web:', res.test('Java')) // false
元字符
????????元字符指的是在正則表達式中,有特殊含義的符號
正則表達式中絕大多數的字符都是描述他們本身,比如:
/ArkTS/ // 表示 ArkTS 這 5 個字母
?有一些具有特殊含義的字符,可以極大的提高正則表達式的靈活性和功能,比如:
/[a-z]/ // 只能是 a-z中的字母
像上面的 [ ] , - 就是元字符,接下來咱們來看看有哪些常用的元字符
邊界符
????????則表達式中的邊界符(位置符)用來提示字符所處的位置,主要有兩個字符
邊界符 | 說明 |
Λ | 表示匹配行首的文本(以誰開始) |
$ | 表示匹配行尾的文本(以誰結束) |
如果 ^ 和 $ 在一起,表示必須是精確匹配
// 元字符之邊界符
// 1. 匹配開頭的位置 ^
const reg = /^ArkTS/
console.log('res:', reg.test('ArkTS語法')) //true
console.log('res:', reg.test('學習ArkTS')) //false
console.log('res:', reg.test('學習ArkTS語法')) //false
console.log('res:', reg.test('Ar')) //false// 2. 匹配結束的位置 $
const reg1 = /ArkTS$/
console.log('res:', reg1.test('ArkTS語法')) //false
console.log('res:', reg1.test('學習ArkTS')) //true
console.log('res:', reg1.test('學習ArkTS語法')) //false
console.log('res:', reg1.test('Ar')) //false// 3. 精確匹配 ^ $
const reg2 = /^ArkTS$/
console.log('res:', reg2.test('ArkTS語法')) //false
console.log('res:', reg2.test('學習ArkTS')) //false
console.log('res:', reg2.test('學習ArkTS語法')) //false
console.log('res:', reg2.test('ArkTS')) //true
console.log('res:', reg2.test('Ar')) //false
console.log('res:', reg2.test('ArkTSArkTS')) //false
量詞
????????量詞用來設定某個模式的重復次數。
量詞 | 說明 |
* | 重復零次或更多次 |
+ | 重復一次或更多次 |
? | 重復零次或一次 |
{n} | 重復?n?次 |
{n,} | 重復?n?次或更多次 |
{n,m} | 重復?n?到?m?次 |
基于基礎模版來看看具體的效果:
// 元字符之量詞
// 1. * 重復次數 >= 0 次
const reg1 = /^w*$/
console.log('res:', reg1.test('')) //true
console.log('res:', reg1.test('w')) //true
console.log('res:', reg1.test('ww')) //true
console.log('res:', '-----------------------')// 2. + 重復次數 >= 1 次
const reg2 = /^w+$/
console.log('res:', reg2.test('')) //false
console.log('res:', reg2.test('w')) //true
console.log('res:', reg2.test('ww')) //true
console.log('res:', '-----------------------')// 3. ? 重復次數 0 || 1
const reg3 = /^w?$/
console.log('res:', reg3.test('')) //true
console.log('res:', reg3.test('w')) //true
console.log('res:', reg3.test('ww')) //false
console.log('res:', '-----------------------')// 4. {n} 重復 n 次
const reg4 = /^w{3}$/
console.log('res:', reg4.test('')) // false
console.log('res:', reg4.test('w')) // false
console.log('res:', reg4.test('ww')) // false
console.log('res:', reg4.test('www')) //true
console.log('res:', reg4.test('wwww')) // false
console.log('res:', '-----------------------')// 5. {n,} 重復次數 >= n
const reg5 = /^w{2,}$/
console.log('res:', reg5.test('')) //false
console.log('res:', reg5.test('w')) //false
console.log('res:', reg5.test('ww')) //true
console.log('res:', reg5.test('www')) //true
console.log('res:', '-----------------------')// 6. {n,m} n =< 重復次數 <= m
const reg6 = /^w{2,4}$/
console.log('res:', reg6.test('w')) //false
console.log('res:', reg6.test('ww')) //true
console.log('res:', reg6.test('www')) //true
console.log('res:', reg6.test('wwww')) //true
console.log('res:', reg6.test('wwwww')) //false
范圍
????????表示字符的范圍,定義的規則限定在某個范圍,比如只能是英文字母,或者數字等等,用表示范圍。
范圍 | 說明 | |
[abc] | 匹配包含的單個字符。也就是只有all bllc?這三個單字符返回true,可以理解為多選1 | |
[a-z] | 連字符。來指定字符范圍。[?a-z?]表示?a到226個英文字母 | |
[^abc] | 取反符。[^a-z]匹配除了小寫字母以外的字符 |
// 元字符之范圍 []// 1. [abc] 匹配包含的單個字符, 多選1
const reg1 = /^[abc]$/
console.log('res:', reg1.test('a')) //true
console.log('res:', reg1.test('b')) //true
console.log('res:', reg1.test('c')) //true
console.log('res:', reg1.test('d')) //false
console.log('res:', reg1.test('ab')) //false
console.log('-----------');// 2. [a-z] 連字符 單個
const reg2 = /^[a-z]$/
console.log('res:', reg2.test('a')) //true
console.log('res:', reg2.test('p')) //true
console.log('res:', reg2.test('0')) //false
console.log('res:', reg2.test('A')) //false
console.log('-----------');// 3. [^a-z] 取反符
const reg5 = /^[^a-z]$/
console.log('res:', reg5.test('a')) //false
console.log('res:', reg5.test('A')) //true
console.log('res:', reg5.test('么')) //true
console.log('-----------');// 4.想要包含小寫字母,大寫字母 ,數字
const reg3 = /^[a-zA-Z0-9]$/
console.log('res:', reg3.test('B')) //true
console.log('res:', reg3.test('b')) //true
console.log('res:', reg3.test('9')) //true
console.log('res:', reg3.test(',')) //false
console.log('-----------');
字符類
????????某些常見模式的簡寫方式,區分字母和數字
字符類 | 說明 |
\d | 匹配0-9之間的任一數字,相當于[0-9] |
\D | 匹配所有0-9以外的字符,相當于[^0-9] |
\w | 匹配任意的字母、數字和下劃線,相當于[A-Za-z0-9_] |
\W | 除所有字母、數字和下劃線以外的字符,相當于[^A-Za-z0-9_] |
\s | 匹配空格(包括換行符、制表符、空格符等),相等于[\t\r\n\v\f] |
\S | 匹配非空格的字符,相當于[^\t\r\n\v\f] |
替換和修飾符?
????????字符串的 replace 方法,可以結合正則進行字符串的替換。
// 檢索規則:文本、正則
// 替換內容:文本
// 返回值:替換之后的結果字符串.replace(檢索規則,替換內容)// 替換和修飾符const str = '歡迎大家學習ArkTS,相信大家一定能學好ArkTS!!!'// 將 ArkTS 替換位 鴻蒙開發咋寫? 分別用正則和字符串作為檢索規則
使用正則結合修飾符可以實現大小寫區分,是否匹配所有
修飾符 | 說明 |
i | 單詞?ignore?的縮寫,正則匹配時字母不區分大小寫 |
g | 單詞?global?的縮寫,匹配所有滿足正則表達式的結果 |
// 替換和修飾符
const str = '歡迎大家學習ArkTS,相信大家一定能學好ArkTS!!!'
// replace 返回值是替換完畢的字符串
console.log(str.replace(/arkts/, '鴻蒙開發'))
//歡迎大家學習ArkTS,相信大家一定能學好ArkTS!!!console.log(str.replace(/arkts/i, '鴻蒙開發'))
//歡迎大家學習鴻蒙開發,相信大家一定能學好ArkTS!!!console.log(str.replace(/arkts/gi, '鴻蒙開發'))
//歡迎大家學習鴻蒙開發,相信大家一定能學好鴻蒙開發!!!console.log(str.replace(/arkts/ig, '鴻蒙開發'))
//歡迎大家學習鴻蒙開發,相信大家一定能學好鴻蒙開發!!!