赞
踩
本系列文章主要是记录笔者在鸿蒙领域的学习与工作中的知识点笔记记录,其中不止会针对鸿蒙中的学习问题进行思考与记录,也会对涉及到的一些嵌入式等其他领域进行记录。
目前该系列已发布的内容有:
string
等字符串对象。OpenHarmony
应用开发的时候,遇到了一些场景,我需要从像string
这样的字符串数据中,获取我需要的特定信息。DS
的基础,知道这种其实就是字符串匹配问题,针对这种问题,常见的解法是使用:暴力匹配、KMP
、AC
自动机等方式,但是在实际应用当中如果这样做,可能比较蠢。Python
中使用过具有正则表达(式)匹配功能的 re
模块的经历。但是ArkTs 并没有类似的集成API。但是在ArkTs 的相关文档以及文章中,对这一块的描述都比较少。但是从官方的描述来看,我们可以知道 ArkTs 是 TypeScript
和 JavaScript
的超集,兼容了JS/TS的语言生态。所以黄同学在写这篇文章的时候,看了不少JS和TS关于正则表达式的使用的文档。在ArkTs
中,正则表达式的变量类型是RegExp
,这一点基本上兼容了JS。
有两种表达方式
可以用斜杠来包住正则表达式,里边就是正则表达式的内容。
let rep: RegExp = /a\S+b/;
也可以用RegExp的构造函数来构造,需要传入string
作为参数
let rep = new RegExp("a\S+b");
正则表达式的变量使用较多,主要有:
match
,这个是黄同学使用的最多的,在字符串中执行查找匹配的string
方法,会返回一个数组。
let rep: RegExp = /acfun1+/;
let s: string = "bkacfun1112";
console.log(s.match(rep)[0]); // acfun111
test
,在一个字符串中测试,判断正则表达式是否能够和字符串匹配
let rep: RegExp = /acfun1+/;
let s: string = "bkacfun1112";
console.log('' + rep.test(string) ? 'yes' : 'no'); // yes
match
查到的是一个第一个,但如果想匹配所有符合正则表达式的,可以使用 matchAll
,这个返回的是一个迭代器 ⚛️,这个就不给出用例了,感兴趣的朋友可以自行去js
的相关文档,或者看看我的参考资料2
和3
。下面也一样。
search
,在字符串中查找匹配的位置(第一个),成功时返回匹配的位置,失败返回-1
。
replace
,即用字符串替换匹配到的字符子串。
黄同学在ArkTs中使用正则表达式做匹配的时候,发现和使用
Python
的re
模块有所不同。在python中,使用re.match
的时候,会先匹配到最短满足的字符串子串。而在ArkTs
中,使用正则表达式和match
的时候,会匹配到最长满足的字符串子串。
上面的文字描述可能会比较抽象,下面用示例来表示:注释中即为输出内容
python:
import re
s = 'sttstts'
pat = re.compile(r's.*s')
print(pat.match(pat).group(0)) # stts
ArkTs:
let rep: RegExp = /s.*s/
let s: string = 'sttstts'
console.log(s.match(rep)[0]) // sttstts
以上这两种情况其实就是,在正则表达式的相关概念中,其实就是关于匹配模式中的 贪婪模式 与 懒惰模式。
关于这两种的详细概念,如果朋友们想要了解,不妨去看看正则表达式的文档。黄同学在这里将用比较简单、浅显的文字表述来解释这两种模式:
+
, *
等。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。