当前位置: 首页 > article >正文

鸿蒙harmonyOS:笔记 正则表达式

        从给出的文本中,按照既定的相关规则,匹配出符合的数据,其中的规则就是正则表达式,使用正则表达式,可以使得我们用简洁的代码就能实现一定复杂的逻辑,比如判断一个邮箱账号是否符合正常的邮箱账号,再比如判断一个手机号是否正常的手机号,等等,正因为有了正则,得以让文本处理起来更加的简单。
日常开发中主要用来做三件事 : 匹配、替换、提取。
  • 手机号表单要求用户只能输入11位的数字 (匹配)
  • 过滤掉页面内容中的一些敏感词(替换)
  • 从字符串中获取我们想要的特定部分(提取)

基本使用 

   基础步骤;
  1. 定义正则
  2. 使用正则
  3. 定义正则
// 方式 1:简写
const res1: RegExp = /ArkTS/

// 方式 2:通过实例化的方式创建
const reg2: RegExp = new RegExp('ArkTS')

 1. 使用正则

  • test()方法 用来查看正则表达式与指定的字符串是否匹配
  • 如果正则表达式与指定的字符串匹配 ,返回true,否则false
console.log('web:', res.test('ArkTS')) // true

console.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,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 ]表示 a226个英文字母
[^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, '鸿蒙开发')) 
//欢迎大家学习鸿蒙开发,相信大家一定能学好鸿蒙开发!!!


http://www.kler.cn/a/600108.html

相关文章:

  • JVM常用概念之编译器黑洞
  • 数学建模:MATLAB卷积神经网络
  • Langchain 自定义工具和内置工具
  • FRP结合Nginx实现HTTPS服务穿透
  • LVGL移植详细教程(基于STM32F407+rt-thread+FSMC接口屏+V9版本)
  • java 设置操作系统编码、jvm平台编码和日志文件编码都为UTF-8的操作方式
  • 现代化前端异常治理与容灾体系深度解析
  • 本周安全速报(2025.3.18~3.24)
  • VSCODE上ckg_server_linux进程占用CPU过多
  • C++红黑树的深入解析:从理论到实践
  • Mysql--日志(错误日志、二进制日志、查询日志、慢查询日志)
  • Wireshark网络抓包分析使用详解
  • SAP SD学习笔记34 - 预詑品(寄售物料)之 预詑品返品(KR),预詑品引取(KA)
  • 青少年编程与数学 02-011 MySQL数据库应用 16课题、安全机制
  • js 中 如何获取数组的交集【面试题】
  • 如何为AI开发选择合适的服务器?
  • 《HarmonyOS Next群头像拼接与组件截图技术解析》
  • 第六届IEEE人工智能、网络与信息技术国际学术会议(AINIT 2025)
  • “我是GM”之NAS搭建Luanti游戏服务器,开启沙盒游戏新体验
  • WPS中把多张PPT打印到一张A4纸上