1 OpenHarmony中使用正则表达式-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenHarmony中使用正则表达式

OpenHarmony技术社区 来源:OST开源开发者 2023-06-06 09:24 次阅读

本文主要介绍笔者在做开源鸿蒙应用开发时,ArkTs 中使用正则表达式处理像 string 等字符串对象。

主要内容如下:

一些 ArkTs 使用正则表达式示例,以及一些可能比较常用的小技巧。

正则表达式的一些应用技巧,涉及到匹配模式。

正则表达式在开源鸿蒙应用开发中,可以起到怎样的一个应用。

黄同学最近在做 OpenHarmony 应用开发的时候,遇到了一些场景,我需要从像 string 这样的字符串数据中,获取我需要的特定信息

传统的解决方式:相信我的读者可能都有一些 DS 的基础,知道这种其实就是字符串匹配问题,针对这种问题,常见的解法是使用:暴力匹配、KMP、AC 自动机等方式,但是在实际应用当中如果这样做,可能比较蠢。

我此前有过在 Python 中使用过具有正则表达(式)匹配功能的 re 模块的经历。但是 ArkTs 并没有类似的集成 API

但是在 ArkTs 的相关文档以及文章中,对这一块的描述都比较少。从官方的描述来看,我们可以知道 ArkTs 是 TypeScript 和 JavaScript 的超集,兼容了JS/TS的语言生态。

所以我在写这篇文章的时候,看了不少 JS 和 TS 关于正则表达式的使用的文档。

MindMap:


正则表达式在ArkTs的使用

①变量 RegExp

在 ArkTs 中,正则表达式的变量类型是 RegExp,这一点基本上兼容了 JS。有两种表达方式。

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

letrep:RegExp=/aS+b/;

也可以用 RegExp 的构造函数来构造,需要传入 string 作为参数

letrep=newRegExp("aS+b");

②使用

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

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

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

match 查到的是一个第一个,但如果想匹配所有符合正则表达式的,可以使用 matchAll,这个返回的是一个迭代器,这个就不给出用例了,感兴趣的朋友可以自行去 js 的相关文档。

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

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

③贪婪模式与懒惰模式

我在 ArkTs 中使用正则表达式做匹配的时候,发现和使用 Python 的 re 模块有所不同。

在 Python 中,使用 re.match 的时候,会先匹配到最短满足的字符串子串。而在 ArkTs 中,使用正则表达式和 match 的时候,会匹配到最长满足的字符串子串。

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

Python:

importre
s='sttstts'
pat=re.compile(r's.*s')
print(pat.match(pat).group(0))#stts
ArkTs:
letrep:RegExp=/s.*s/
lets:string='sttstts'
console.log(s.match(rep)[0])//sttstts

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

关于这两种的详细概念,如果朋友们想要了解,不妨去看看正则表达式的文档。

我在这里将用比较简单、浅显的文字表述来解释这两种模式:这两种模式,具体的运作其实就和名字一样。

贪婪模式其实就是尽可能匹配比较长的字符串,如上面的例子 2 中的输出,匹配过程很贪婪,和贪心算法思想类似,尽可能使匹配的结果长;而懒惰模式类似,就是匹配尽可能少的字符串,匹配到满足的即可。

这两种模式,其实就是为了让开发者能更加灵活的使用正则表达式。这种两种模式的区别主要体现在匹配多个字符的特殊正则表达式字符,比如正则表达式中+,*等。

④ArkTs 正则表达式懒惰模式

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

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

letrep:RegExp=/s.*?s/
lets:string='sttstts'
console.log(s.match(rep)[0])//stts

上述的用 ? 后,就匹配最少的字符。

正则表达式应用

相信通过上文的了解,我们已经可以对正则表达式的已经有了简单的认知,尤其是通过这些使用的示例,很容易知道,从直接角度,正则表达式的应用是对字符串这种类型的数据处理。这种处理是查询匹配,替换。

通过上述的直接角度,我们可以对字符串数据,即文本数据,可以用于做字符串过滤,在很多有查找,替换功能的应用(比如大家常用的编辑器 vscode,记事本),这些功能其实就有正则表达式影子。

ArkTs 应用:网络数据过滤

这个是我在编写 OpenHarmony 应用时,遇到的一个场景:使用@ohos.net.http 库中相关 api 向服务器发送 http 请求,会收到 http 报文。

这种报文并不只是数据,还会有其他的部分。而我需要提取数据部分,且要分别提取出数据部分的某些字段。

因此,需要使用正则表达式来进行对网络数据的过滤:

Code(ArKTs)

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 字符串
    +关注

    关注

    1

    文章

    578

    浏览量

    20505
  • python
    +关注

    关注

    56

    文章

    4792

    浏览量

    84624
  • 正则表达式
    +关注

    关注

    0

    文章

    27

    浏览量

    3483
  • 鸿蒙
    +关注

    关注

    57

    文章

    2339

    浏览量

    42803
  • OpenHarmony
    +关注

    关注

    25

    文章

    3713

    浏览量

    16251

原文标题:OpenHarmony中使用正则表达式

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    什么是正则表达式正则表达式如何工作?哪些语法规则适用正则表达式

    正则表达式又称规则表达式(Regular Expression,在代码中常简写为 regex、regexp 或 RE),是一种用于匹配、查找、替换文本的强大工具。它能够以特定的模式匹配字符串,从而
    的头像 发表于 11-03 14:41 3525次阅读
    什么是<b class='flag-5'>正则表达式</b>?<b class='flag-5'>正则表达式</b>如何工作?哪些语法规则适用<b class='flag-5'>正则表达式</b>?

    shell正则表达式学习

    正则表达式在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多
    发表于 07-25 17:18

    深入浅出boost正则表达式

    什么是正则表达式正则表达式是一种用来描述一定数量文本的模式。Regex代表Regular Express. 如果您不知道什么是正则表达式,请看这篇文章:深入浅出之正则表达式
    发表于 09-08 18:09 9次下载

    PHP正则表达式

    PHP正则表达式,PHP建设必备的的工具,初学者简单易懂快速入门,高手进阶手册。
    发表于 04-18 10:46 0次下载

    精通正则表达式

    详细的快速正则表达式的查询电子书,简单而丰富
    发表于 05-16 18:04 5次下载

    关于java正则表达式的用法详解

    正则表达式 一个正则表达式是一个用于文本搜索的文本模式。换句话说,在文本中搜索出现的模式。例如,你可以用正则表达式搜索网页中的邮箱地址或超链接。 正则表达式示例 下面是一个简单的Jav
    发表于 09-27 14:24 0次下载

    快速入门IPv6和正则表达式

    对于日常开发中只接触IPv4,并没有深入研究过正则表达式的开发者,面对IPv6和正则表达式,容易产生畏惧心理,觉得是两座难以翻越的大山。本文通过一些表格整理对IPv6的表示方法,以及正则表达式的特殊符号进行了分类和说明,带领大家
    的头像 发表于 03-30 09:31 8994次阅读
    快速入门IPv6和<b class='flag-5'>正则表达式</b>

    Python正则表达式教程之标准库的完整介绍及使用示例说明

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例。本文的内容不包括如何编写高效的正则表达式、如何优化
    发表于 01-23 16:00 3次下载
    Python<b class='flag-5'>正则表达式</b>教程之标准库的完整介绍及使用示例说明

    Python正则表达式的学习指南

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例。本文的内容不包括如何编写高效的正则表达式、如何优化
    发表于 09-15 08:00 0次下载
    Python<b class='flag-5'>正则表达式</b>的学习指南

    Python正则表达式指南

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例。本文的内容不包括如何编写高效的正则表达式、如何优化
    发表于 03-26 09:13 10次下载
    Python<b class='flag-5'>正则表达式</b>指南

    C语言如何使用正则表达式

    C语言的正则表达式规则,特此跟大家分享。
    的头像 发表于 03-16 08:41 4932次阅读

    python正则表达式中的常用函数

    编译正则表达式模式,返回一个正则对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率。)
    的头像 发表于 03-18 16:12 1790次阅读

    Linux入门之正则表达式

    正则表达式是用来表达字符串匹配模式的方法,利用正则表达式,可以让我们轻易地实现对目标字符串的**查找**、**删除**、**替换**等操作。 正则表达式并不复杂,它并不包含难以理
    的头像 发表于 05-12 15:31 871次阅读
    Linux入门之<b class='flag-5'>正则表达式</b>

    shell脚本基础:正则表达式grep

    在Linux上有许多命令可以使用正则表达式,其中最常见的是grep命令和sed命令。正则表达式有多种类型,每种类型中可以使用的元字符类型不同。最常见的是基本正则表达式和扩展正则表达式
    的头像 发表于 05-29 09:29 1249次阅读
    shell脚本基础:<b class='flag-5'>正则表达式</b>grep

    Python中的正则表达式

    哈喽大家好,我是了不起,今天给大家讲Python中的正则表达式 在Python中,正则表达式是一种强大的文本处理工具,它可以用来匹配、搜索、替换文本。正则表达式是一个特殊的字符序列,它可以描述一类
    的头像 发表于 06-21 16:52 982次阅读