【FFH】OpenHarmony——ArkTs应用开发+正则表达式

news2024/12/25 9:15:08

【FFH】OpenHarmony——ArkTs应用开发+正则表达式

文章目录

  • 【FFH】OpenHarmony——ArkTs应用开发+正则表达式
    • 1. 前言——系列介绍
    • 2. 本文摘要及背景
      • 2.1 摘要
      • 2.2 背景
      • 2.3 MindMap
    • 3. 正则表达式在ArkTs的使用
      • 3.1 变量 RegExp
      • 3.2 使用
      • 3.3 贪婪模式与懒惰模式
        • :eye_speech_bubble:ArkTs 正则表达式 懒惰模式
    • 4. 正则表达式应用
      • 4.1 ArkTs应用——网络数据过滤
    • 参考资料

1. 前言——系列介绍

本系列文章主要是记录笔者在鸿蒙领域的学习与工作中的知识点笔记记录,其中不止会针对鸿蒙中的学习问题进行思考与记录,也会对涉及到的一些嵌入式等其他领域进行记录。

目前该系列已发布的内容有:

  1. 【FFH】开源鸿蒙南向嵌入学习笔记——NAPI框架学习(一)-开源基础软件社区-51CTO.COM

2. 本文摘要及背景

2.1 摘要

  1. 本文最核心❇️ :在做(开源)鸿蒙应用开发时,ArkTs中使用正则表达式处理像string等字符串对象。
  2. 介绍一些ArkTs使用正则表达式示例,以及一些可能比较常用的小技巧✴️ 。
  3. 介绍正则表达式的一些应用技巧,涉及到匹配模式
  4. 正则表达式在开源鸿蒙应用开发中,可以起到怎样的一个应用。

2.2 背景

  1. 黄同学最近在做OpenHarmony 应用开发的时候,遇到了一些场景,我需要从像string 这样的字符串数据中,获取我需要的特定信息。
  2. 传统的解决方式:相信我的读者可能都有一些DS的基础,知道这种其实就是字符串匹配问题,针对这种问题,常见的解法是使用:暴力匹配KMPAC自动机等方式,但是在实际应用当中如果这样做,可能比较蠢。
  3. 黄同学此前有过在Python中使用过具有正则表达(式)匹配功能的 re 模块的经历。但是ArkTs 并没有类似的集成API。但是在ArkTs 的相关文档以及文章中,对这一块的描述都比较少。但是从官方的描述来看,我们可以知道 ArkTs 是 TypeScriptJavaScript超集,兼容了JS/TS的语言生态。所以黄同学在写这篇文章的时候,看了不少JS和TS关于正则表达式的使用的文档。

2.3 MindMap

在这里插入图片描述

3. 正则表达式在ArkTs的使用

3.1 变量 RegExp

  1. ArkTs 中,正则表达式的变量类型是RegExp,这一点基本上兼容了JS。

  2. 有两种表达方式

    1. 可以用斜杠来包住正则表达式,里边就是正则表达式的内容。

      let rep: RegExp = /a\S+b/;
      
    2. 也可以用RegExp的构造函数来构造,需要传入string作为参数

      let rep = new RegExp("a\S+b");
      

3.2 使用

正则表达式的变量使用较多,主要有:

  1. match,这个是黄同学使用的最多的,在字符串中执行查找匹配的string方法,会返回一个数组。

    let rep: RegExp = /acfun1+/;
    let s: string = "bkacfun1112";
    console.log(s.match(rep)[0]);			// acfun111
    
  2. test,在一个字符串中测试,判断正则表达式是否能够和字符串匹配

let rep: RegExp = /acfun1+/;
let s: string = "bkacfun1112";
console.log('' + rep.test(string) ? 'yes' : 'no');			// yes
  1. match 查到的是一个第一个,但如果想匹配所有符合正则表达式的,可以使用 matchAll,这个返回的是一个迭代器 ⚛️,这个就不给出用例了,感兴趣的朋友可以自行去js 的相关文档,或者看看我的参考资料23。下面也一样。

  2. search,在字符串中查找匹配的位置(第一个),成功时返回匹配的位置,失败返回-1

  3. replace,即用字符串替换匹配到的字符子串。

3.3 贪婪模式与懒惰模式

黄同学在ArkTs中使用正则表达式做匹配的时候,发现和使用Pythonre模块有所不同。在python中,使用 re.match 的时候,会先匹配到最短满足的字符串子串。而在ArkTs中,使用正则表达式和match的时候,会匹配到最长满足的字符串子串。

上面的文字描述可能会比较抽象,下面用示例来表示:注释中即为输出内容

  1. python:

    import re
    s = 'sttstts'
    pat = re.compile(r's.*s')
    print(pat.match(pat).group(0))		# stts
    
  2. ArkTs:

    let rep: RegExp = /s.*s/
    let s: string = 'sttstts'
    console.log(s.match(rep)[0])		// sttstts
    

以上这两种情况其实就是,在正则表达式的相关概念中,其实就是关于匹配模式中的 贪婪模式懒惰模式

关于这两种的详细概念,如果朋友们想要了解,不妨去看看正则表达式的文档。黄同学在这里将用比较简单、浅显的文字表述来解释这两种模式:

  1. 这两种模式,具体的运作其实就和名字一样。贪婪模式其实就是尽可能匹配比较长的字符串,如上面的例子2中的输出,匹配过程很贪婪,和贪心算法思想类似,尽可能使匹配的结果长;而懒惰模式类似,就是匹配尽可能少的字符串,匹配到满足的即可。
  2. 这两种模式,其实就是为了让开发者能更加灵活的使用正则表达式。这种两种模式的区别主要体现在匹配多个字符的特殊正则表达式字符,比如正则表达式中 +* 等。

👁‍🗨ArkTs 正则表达式 懒惰模式

那么,如果你是ArkTs开发者,你要用懒惰模式,但是在ArkTs中,正则表达式默认是贪婪的。如何切换到懒惰模式呢?

  1. 这里和Js 一样,可以用?来切换到懒惰模式,我们将上面的代码修改后

    let rep: RegExp = /s.*?s/
    let s: string = 'sttstts'
    console.log(s.match(rep)[0])		// stts
    
  2. 上述的用 ? 后,就匹配最少的字符。

4. 正则表达式应用

  1. 相信通过上文的了解,我们已经可以对正则表达式的已经有了简单的认知,尤其是通过这些使用的示例,很容易知道,从直接角度,正则表达式的应用是对字符串这种类型的数据处理。这种处理是查询匹配,替换。
  2. 通过上述的直接角度,我们可以对字符串数据,即文本数据,可以用于做字符串过滤,在很多有查找,替换功能的应用(比如大家常用的编辑器vscode,记事本),这些功能其实就有正则表达式影子。黄同学曾经用过python的正则表达式写过一些代码过滤器,感兴趣的可以看看这几篇文章:
    1. (160条消息) 利用re模块去除代码块注释——Python开发_python re 注释_物联黄同学的博客-CSDN博客
    2. (160条消息) 利用re实现修改测试用例格式——python实现_方法有重写如何修改测试用例_物联黄同学的博客-CSDN博客

4.1 ArkTs应用——网络数据过滤

  1. 这个是黄同学在编写OpenHarmony应用时,遇到的一个场景:使用 @ohos.net.http 库中相关api向服务器发送http请求,会收到http报文。这种报文并不只是数据,还会有其他的部分。而黄同学需要提取数据部分,且要分别提取出数据部分的某些字段。因此,需要使用正则表达式来进行对网络数据的过滤。
  2. CodeArKTs在这里插入图片描述

参考资料

黄同学在编写这篇blog的时候,参考了一些文献。

  1. ArkTS 语言 - HarmonyOS应用开发官网
  2. 正则表达式 - JavaScript | MDN (mozilla.org)
  3. 正则表达式语言 - 快速参考 | Microsoft Learn
  4. JS正则(贪婪模式)_iteye_20185的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/568306.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从HelloWorld深入源码了解SpringSecurity底层逻辑

文章目录 一、环境搭建1、创建项目测试1.1、搭建基础项目1.2、整合Spring Security 二、实现原理1、Spring Security的实现原理1.1、Spring Security 如何完成认证和授权1.2、Security Filters 2、 Spring Security默认配置和如何自定义配置 三、整个HelloWorld的流程分析三、H…

流程用例的签名保障,Python接口自动化框架封装案例!

目录 前言: 1.项目背景及需求 2.框架整体架构设计 3.接口管理模块的封装 4.用例管理模块的封装 5.请求模块的封装 6.签名模块的封装 7.案例展示及代码实现 结语: 前言: 随着互联网技术的不断发展,人们对于软件质量的要求…

臻图信息跟进新基建建设,构建“智慧铁路”“指挥调度”管理系统

铁路作为国民经济的骨干、国家关键性基础建设,在社会经济发展中起到关键性作用,交通在全天运行、运量多、运价少、占地面积小和安全环保等方面有着显著的优势。 近年来,我国高度重视铁路发展,2020年8月国铁集团出台《新时代交通强…

Windows系统自带远程桌面和远程协助怎么连接?

随着IT技术的发展和远程办公的兴起,在日常工作中,远程桌面和远程协助等功能已经成为很多用户需要掌握的技能之一。而对于使用Windows系统的用户来说,Windows系统自带的远程桌面和远程协助功能,更是令人欣喜的利器。下面我们就来一…

油猴安装教程及ChatGPT配置

文章目录 目录 文章目录 前言 一. 安装油猴 二、使用步骤 三.安装插件 (ChatGPT) 四. 脚本推荐 前言 作者简介: zuiacsn 座右铭: 抱怨身处黑暗,不如提灯前行 内容介绍: 油猴 油猴(Tampermonkey)指的是一个流行的用户脚本管理器,它能使…

GAMES202作业1

目录 Shadow MapCalcLightMVP函数useShadowMap函数Bias函数 最终效果 PCF两个采样函数PCF函数最终效果 PCSSfindBlocker函数PCSS函数最终效果 参考 先放上公式: 后面的积分项是我们在作业0中就做好的blinnphong项,我们要求的就是积分项前,等…

认识 Protobuf 及其简单使用

文章目录 一、序列化与反序列化1.1 序列化1.2 反序列化1.3 序列化与反序列化的使用场景 二、初识 Protobuf三、Protobuf 的安装四、Protobuf 的使用案例4.1 创建并编写 .proto 文件的基本规范与语法4.2 编译 .proto 文件4.3 序列化与反序列化的使用 五、总结 ProtoBuf 的使用特…

spring boot日志

日志介绍日志的使用日志级别日志持久化更简单的输入日志lombok的运行原理 日志介绍 日志的作用: 1:发现问题; 2:定位问题; 3:记录用户的行为:看哪些是方法用户;还能拿到用户的ip&am…

【云原生|探索 Kubernetes 系列 4】理解现代云原生时代的引擎

文章目录 系列文章目录👹 关于作者一、前言|回顾二、静态和动态视图三、爆火的容器编排工具 Kubernetes 的诞生四、Kubernetes 要解决的问题是什么?五、理解 Kubernetes 全局架构图Master(控制节点)Node(计算节点&…

源码分析:springboot如何确定当前应用程序类型

文章目录 一、介绍二、源码分析三、测试 一、介绍 大多数java后端开发的朋友们想必都是通过创建springboot项目,然后通过编写Controller进行接口开发的,该接口底层是由非响应式的servlet提供支持的,其接口内部逻辑为阻塞式的。但也有一部分朋…

leetcode 837. New 21 Game(新21点)

起始点数为0&#xff0c;当手上点数 < k 时抽取新的卡片&#xff0c; 每次抽取的点数范围在 1 ~ maxPts. 每次收取是独立的&#xff0c;每个点数概率相同。 当手上点数 > k 时游戏结束。 返回手上点数 < n 的概率。 思路&#xff1a; 先看特殊情况&#xff0c; k …

JQuery实现小项目

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 目录 文章目录 一、JQuery是什么 二、JQuery项目 2.1 猜数字 2.2 表白墙 2.3 聚合搜索 2.4 计算器 一、JQuery是什么 jQuery是一个快速、简洁的JavaScript框架&#xff0c;是继Prototype之…

MQTT(1):MQTT协议介绍

随着 5G 时代的来临&#xff0c;万物物联的伟大构想正在成为现实。联网的物联网设备在 2018 年已经达到了 70 亿&#xff0c;在未来两年&#xff0c;仅智能水电气表就将超过10亿 海量的设备接入和设备管理对网络带宽、通信协议以及平台服务架构都带来了很大挑战。对于物联网协议…

pandas 遇到Key Error错误的一个小问题

最近刚刚接触Python&#xff0c;安装了Anaconda&#xff0c; 编程小白一个&#xff0c;照着教程准备做一个中考成绩录取分数线分析的案例&#xff0c; 使用read_excel()读入数据后&#xff0c; import pandas as pd data pd.read_excel(rC:\2021-2022深圳中考录取分数线(1).xl…

SpringBoot配置文件 | 多环境配置 | 读取配置的4种方式

文章目录 一、写配置文件的位置读取的优先级&#xff1a;1.文件位置&#xff1a;2.文件名和文件后缀&#xff1a;3.配置文件中的profile-specific文件&#xff1a;4.命令行参数 二、多环境配置1. properties&#xff1a;2. yaml 三、yaml配置文件yaml、properties、xml对比&…

【软考-中级】系统集成项目管理工程师 【13合同管理】

持续更新。。。。。。。。。。。。。。。 【第十三章】合同管理 2 分 考点 1考点 2考点 3考点4:成本补偿合同考点5:工料合同考点6:合同类型的选择考点 7考点 8:合同管理包括考点9考点 10考点 11考点 12考点 13考点 14考点 15历年真题2022 年 05 月2021 年 11 月2021 年 05 月 考…

Redis底层原理深入学习

一、基本类型及底层实现 1.String 1&#xff09;使用场景&#xff1a;简单字符串存储、分布式锁、计数器、全局唯一ID 2&#xff09;数据结构&#xff1a;C语言中String用char[]表示&#xff0c;源码中用SDS封装char[]&#xff0c;这是Redis存储的最小单元&#xff0c;一个SD…

安全中级3-nginx反向代理负载均衡的webshell

目录 一、负载均衡 1.nginx的负载均衡 2.nginx 支持的几种策略&#xff1a; 二、负载均衡下的webshell连接&#xff08;负载均衡下的wenbshell环境下载地址&#xff09; 1.内部网络的结构 2.场景描述 3.利用我们的中国蚁剑连接我们的代理服务器nginx 三、webshell遇到的…

电脑待机或者睡眠后TeamViewer就无法连接了

电脑待机或者睡眠后TeamViewer就无法连接了 设置睡眠状态下不关闭网卡驱动 公司的笔记本&#xff0c;安装了teamviewer&#xff0c;离开时把teamviewer打开&#xff0c;回家后连接时提示伙伴未在机器上运行&#xff0c;此时电脑处于黑屏、待机、睡眠状态 其实电脑睡眠后会关掉网…

创新管理工具:低代码平台在学校管理中的应用实践

随着信息技术的不断发展&#xff0c;学校管理也随之发生了变革。传统的学校管理方式往往是依靠人工操作&#xff0c;存在信息不透明、效率低下等问题&#xff0c;而数字化管理的出现&#xff0c;可以帮助学校提高管理效率、降低管理成本、提升数据统计和分析能力。而低代码技术…