一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenHarmony中使用正則表達(dá)式

OpenHarmony技術(shù)社區(qū) ? 來(lái)源:OST開(kāi)源開(kāi)發(fā)者 ? 2023-06-06 09:24 ? 次閱讀

本文主要介紹筆者在做開(kāi)源鴻蒙應(yīng)用開(kāi)發(fā)時(shí),ArkTs 中使用正則表達(dá)式處理像 string 等字符串對(duì)象。

主要內(nèi)容如下:

一些 ArkTs 使用正則表達(dá)式示例,以及一些可能比較常用的小技巧。

正則表達(dá)式的一些應(yīng)用技巧,涉及到匹配模式。

正則表達(dá)式在開(kāi)源鴻蒙應(yīng)用開(kāi)發(fā)中,可以起到怎樣的一個(gè)應(yīng)用。

黃同學(xué)最近在做 OpenHarmony 應(yīng)用開(kāi)發(fā)的時(shí)候,遇到了一些場(chǎng)景,我需要從像 string 這樣的字符串?dāng)?shù)據(jù)中,獲取我需要的特定信息。

傳統(tǒng)的解決方式:相信我的讀者可能都有一些 DS 的基礎(chǔ),知道這種其實(shí)就是字符串匹配問(wèn)題,針對(duì)這種問(wèn)題,常見(jiàn)的解法是使用:暴力匹配、KMP、AC 自動(dòng)機(jī)等方式,但是在實(shí)際應(yīng)用當(dāng)中如果這樣做,可能比較蠢。

我此前有過(guò)在 Python 中使用過(guò)具有正則表達(dá)(式)匹配功能的 re 模塊的經(jīng)歷。但是 ArkTs 并沒(méi)有類(lèi)似的集成 API。

但是在 ArkTs 的相關(guān)文檔以及文章中,對(duì)這一塊的描述都比較少。從官方的描述來(lái)看,我們可以知道 ArkTs 是 TypeScript 和 JavaScript 的超集,兼容了JS/TS的語(yǔ)言生態(tài)。

所以我在寫(xiě)這篇文章的時(shí)候,看了不少 JS 和 TS 關(guān)于正則表達(dá)式的使用的文檔。

MindMap:


正則表達(dá)式在ArkTs的使用

①變量 RegExp

在 ArkTs 中,正則表達(dá)式的變量類(lèi)型是 RegExp,這一點(diǎn)基本上兼容了 JS。有兩種表達(dá)方式。

可以用斜杠來(lái)包住正則表達(dá)式,里邊就是正則表達(dá)式的內(nèi)容:

letrep:RegExp=/aS+b/;

也可以用 RegExp 的構(gòu)造函數(shù)來(lái)構(gòu)造,需要傳入 string 作為參數(shù):

letrep=newRegExp("aS+b");

②使用

正則表達(dá)式的變量使用較多,主要有:

match,這個(gè)是黃同學(xué)使用的最多的,在字符串中執(zhí)行查找匹配的 string 方法,會(huì)返回一個(gè)數(shù)組。

letrep:RegExp=/acfun1+/;
lets:string="bkacfun1112";
console.log(s.match(rep)[0]);//acfun111
test,在一個(gè)字符串中測(cè)試,判斷正則表達(dá)式是否能夠和字符串匹配。
letrep:RegExp=/acfun1+/;
lets:string="bkacfun1112";
console.log(''+rep.test(string)?'yes':'no');//yes

match 查到的是一個(gè)第一個(gè),但如果想匹配所有符合正則表達(dá)式的,可以使用 matchAll,這個(gè)返回的是一個(gè)迭代器,這個(gè)就不給出用例了,感興趣的朋友可以自行去 js 的相關(guān)文檔。

search,在字符串中查找匹配的位置(第一個(gè)),成功時(shí)返回匹配的位置,失敗返回 -1。

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

③貪婪模式與懶惰模式

我在 ArkTs 中使用正則表達(dá)式做匹配的時(shí)候,發(fā)現(xiàn)和使用 Python 的 re 模塊有所不同。

在 Python 中,使用 re.match 的時(shí)候,會(huì)先匹配到最短滿足的字符串子串。而在 ArkTs 中,使用正則表達(dá)式和 match 的時(shí)候,會(huì)匹配到最長(zhǎng)滿足的字符串子串。

上面的文字描述可能會(huì)比較抽象,下面用示例來(lái)表示:注釋中即為輸出內(nèi)容

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

以上這兩種情況其實(shí)就是,在正則表達(dá)式的相關(guān)概念中,其實(shí)就是關(guān)于匹配模式中的貪婪模式與懶惰模式。

關(guān)于這兩種的詳細(xì)概念,如果朋友們想要了解,不妨去看看正則表達(dá)式的文檔。

我在這里將用比較簡(jiǎn)單、淺顯的文字表述來(lái)解釋這兩種模式:這兩種模式,具體的運(yùn)作其實(shí)就和名字一樣。

貪婪模式其實(shí)就是盡可能匹配比較長(zhǎng)的字符串,如上面的例子 2 中的輸出,匹配過(guò)程很貪婪,和貪心算法思想類(lèi)似,盡可能使匹配的結(jié)果長(zhǎng);而懶惰模式類(lèi)似,就是匹配盡可能少的字符串,匹配到滿足的即可。

這兩種模式,其實(shí)就是為了讓開(kāi)發(fā)者能更加靈活的使用正則表達(dá)式。這種兩種模式的區(qū)別主要體現(xiàn)在匹配多個(gè)字符的特殊正則表達(dá)式字符,比如正則表達(dá)式中+,*等。

④ArkTs 正則表達(dá)式懶惰模式

那么,如果你是 ArkTs 開(kāi)發(fā)者,你要用懶惰模式,但是在 ArkTs 中,正則表達(dá)式默認(rèn)是貪婪的。如何切換到懶惰模式呢?

這里和 Js 一樣,可以用 ? 來(lái)切換到懶惰模式,我們將上面的代碼修改后:

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

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

正則表達(dá)式應(yīng)用

相信通過(guò)上文的了解,我們已經(jīng)可以對(duì)正則表達(dá)式的已經(jīng)有了簡(jiǎn)單的認(rèn)知,尤其是通過(guò)這些使用的示例,很容易知道,從直接角度,正則表達(dá)式的應(yīng)用是對(duì)字符串這種類(lèi)型的數(shù)據(jù)處理。這種處理是查詢(xún)匹配,替換。

通過(guò)上述的直接角度,我們可以對(duì)字符串?dāng)?shù)據(jù),即文本數(shù)據(jù),可以用于做字符串過(guò)濾,在很多有查找,替換功能的應(yīng)用(比如大家常用的編輯器 vscode,記事本),這些功能其實(shí)就有正則表達(dá)式影子。

ArkTs 應(yīng)用:網(wǎng)絡(luò)數(shù)據(jù)過(guò)濾

這個(gè)是我在編寫(xiě) OpenHarmony 應(yīng)用時(shí),遇到的一個(gè)場(chǎng)景:使用@ohos.net.http 庫(kù)中相關(guān) api 向服務(wù)器發(fā)送 http 請(qǐng)求,會(huì)收到 http 報(bào)文。

這種報(bào)文并不只是數(shù)據(jù),還會(huì)有其他的部分。而我需要提取數(shù)據(jù)部分,且要分別提取出數(shù)據(jù)部分的某些字段。

因此,需要使用正則表達(dá)式來(lái)進(jìn)行對(duì)網(wǎng)絡(luò)數(shù)據(jù)的過(guò)濾:

Code(ArKTs)

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    589

    瀏覽量

    21006
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4822

    瀏覽量

    85875
  • 正則表達(dá)式
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    3634
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2469

    瀏覽量

    43652
  • OpenHarmony
    +關(guān)注

    關(guān)注

    26

    文章

    3804

    瀏覽量

    17890

原文標(biāo)題:OpenHarmony中使用正則表達(dá)式

文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    什么是正則表達(dá)式?正則表達(dá)式如何工作?哪些語(yǔ)法規(guī)則適用正則表達(dá)式

    正則表達(dá)式又稱(chēng)規(guī)則表達(dá)式(Regular Expression,在代碼中常簡(jiǎn)寫(xiě)為 regex、regexp 或 RE),是一種用于匹配、查找、替換文本的強(qiáng)大工具。它能夠以特定的模式匹配字符串,從而
    的頭像 發(fā)表于 11-03 14:41 ?4846次閱讀
    什么是<b class='flag-5'>正則表達(dá)式</b>?<b class='flag-5'>正則表達(dá)式</b>如何工作?哪些語(yǔ)法規(guī)則適用<b class='flag-5'>正則表達(dá)式</b>?

    shell正則表達(dá)式學(xué)習(xí)

    正則表達(dá)式在計(jì)算機(jī)科學(xué)中,是指一個(gè)用來(lái)描述或者匹配一系列符合某個(gè)句法規(guī)則的字符串的單個(gè)字符串。在很多文本編輯器或其他工具里,正則表達(dá)式通常被用來(lái)檢索和/或替換那些符合某個(gè)模式的文本內(nèi)容。許多
    發(fā)表于 07-25 17:18

    深入淺出boost正則表達(dá)式

    什么是正則表達(dá)式?正則表達(dá)式是一種用來(lái)描述一定數(shù)量文本的模式。Regex代表Regular Express. 如果您不知道什么是正則表達(dá)式,請(qǐng)看這篇文章:深入淺出之正則表達(dá)式
    發(fā)表于 09-08 18:09 ?9次下載

    PHP正則表達(dá)式

    PHP正則表達(dá)式,PHP建設(shè)必備的的工具,初學(xué)者簡(jiǎn)單易懂快速入門(mén),高手進(jìn)階手冊(cè)。
    發(fā)表于 04-18 10:46 ?0次下載

    精通正則表達(dá)式

    詳細(xì)的快速正則表達(dá)式的查詢(xún)電子書(shū),簡(jiǎn)單而豐富
    發(fā)表于 05-16 18:04 ?5次下載

    關(guān)于java正則表達(dá)式的用法詳解

    正則表達(dá)式 一個(gè)正則表達(dá)式是一個(gè)用于文本搜索的文本模式。換句話說(shuō),在文本中搜索出現(xiàn)的模式。例如,你可以用正則表達(dá)式搜索網(wǎng)頁(yè)中的郵箱地址或超鏈接。 正則表達(dá)式示例 下面是一個(gè)簡(jiǎn)單的Jav
    發(fā)表于 09-27 14:24 ?0次下載

    快速入門(mén)IPv6和正則表達(dá)式

    對(duì)于日常開(kāi)發(fā)中只接觸IPv4,并沒(méi)有深入研究過(guò)正則表達(dá)式的開(kāi)發(fā)者,面對(duì)IPv6和正則表達(dá)式,容易產(chǎn)生畏懼心理,覺(jué)得是兩座難以翻越的大山。本文通過(guò)一些表格整理對(duì)IPv6的表示方法,以及正則表達(dá)式的特殊符號(hào)進(jìn)行了分類(lèi)和說(shuō)明,帶領(lǐng)大家
    的頭像 發(fā)表于 03-30 09:31 ?9285次閱讀
    快速入門(mén)IPv6和<b class='flag-5'>正則表達(dá)式</b>

    Python正則表達(dá)式教程之標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例說(shuō)明

    本文介紹了Python對(duì)于正則表達(dá)式的支持,包括正則表達(dá)式基礎(chǔ)以及Python正則表達(dá)式標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例。本文的內(nèi)容不包括如何編寫(xiě)高效的正則表達(dá)式、如何優(yōu)化
    發(fā)表于 01-23 16:00 ?3次下載
    Python<b class='flag-5'>正則表達(dá)式</b>教程之標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例說(shuō)明

    Python正則表達(dá)式的學(xué)習(xí)指南

    本文介紹了Python對(duì)于正則表達(dá)式的支持,包括正則表達(dá)式基礎(chǔ)以及Python正則表達(dá)式標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例。本文的內(nèi)容不包括如何編寫(xiě)高效的正則表達(dá)式、如何優(yōu)化
    發(fā)表于 09-15 08:00 ?0次下載
    Python<b class='flag-5'>正則表達(dá)式</b>的學(xué)習(xí)指南

    Python正則表達(dá)式指南

    本文介紹了Python對(duì)于正則表達(dá)式的支持,包括正則表達(dá)式基礎(chǔ)以及Python正則表達(dá)式標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例。本文的內(nèi)容不包括如何編寫(xiě)高效的正則表達(dá)式、如何優(yōu)化
    發(fā)表于 03-26 09:13 ?10次下載
    Python<b class='flag-5'>正則表達(dá)式</b>指南

    C語(yǔ)言如何使用正則表達(dá)式

    C語(yǔ)言的正則表達(dá)式規(guī)則,特此跟大家分享。
    的頭像 發(fā)表于 03-16 08:41 ?5218次閱讀

    python正則表達(dá)式中的常用函數(shù)

    編譯正則表達(dá)式模式,返回一個(gè)正則對(duì)象的模式。(可以把那些常用的正則表達(dá)式編譯成正則表達(dá)式對(duì)象,這樣可以提高一點(diǎn)效率。)
    的頭像 發(fā)表于 03-18 16:12 ?1955次閱讀

    Linux入門(mén)之正則表達(dá)式

    正則表達(dá)式是用來(lái)表達(dá)字符串匹配模式的方法,利用正則表達(dá)式,可以讓我們輕易地實(shí)現(xiàn)對(duì)目標(biāo)字符串的**查找**、**刪除**、**替換**等操作。 正則表達(dá)式并不復(fù)雜,它并不包含難以理
    的頭像 發(fā)表于 05-12 15:31 ?1080次閱讀
    Linux入門(mén)之<b class='flag-5'>正則表達(dá)式</b>

    shell腳本基礎(chǔ):正則表達(dá)式grep

    在Linux上有許多命令可以使用正則表達(dá)式,其中最常見(jiàn)的是grep命令和sed命令。正則表達(dá)式有多種類(lèi)型,每種類(lèi)型中可以使用的元字符類(lèi)型不同。最常見(jiàn)的是基本正則表達(dá)式和擴(kuò)展正則表達(dá)式
    的頭像 發(fā)表于 05-29 09:29 ?1515次閱讀
    shell腳本基礎(chǔ):<b class='flag-5'>正則表達(dá)式</b>grep

    Python中的正則表達(dá)式

    哈嘍大家好,我是了不起,今天給大家講Python中的正則表達(dá)式 在Python中,正則表達(dá)式是一種強(qiáng)大的文本處理工具,它可以用來(lái)匹配、搜索、替換文本。正則表達(dá)式是一個(gè)特殊的字符序列,它可以描述一類(lèi)
    的頭像 發(fā)表于 06-21 16:52 ?1145次閱讀