淺談?wù)齽t表達(dá)式中的分組和引用實(shí)現(xiàn)方法
問題
在外刊君讀者群中看到有人提出這樣的一個(gè)需求:
把字符串切成連續(xù)相同字符的正則怎么寫?比如abbcccdddd切成a,bb,ccc,dddd
之前我對(duì)正則表達(dá)式也是略有研究,想嘗試一下。其實(shí)我對(duì)正則表達(dá)式的學(xué)習(xí)基本完全來源于犀牛書的第10章,真正看懂這一章,我覺得操作正則表達(dá)式應(yīng)該不在話下。
我的答案
先給出我的答案吧:
'abbccddd'.match(/(\w)\1*/g) // ["a", "bb", "cc", "ddd"]
說明
拿到這個(gè)問題,首先要匹配字符[a-zA-Z0-9],這里直接使用\w。然后是全局匹配,在最后加上g。難點(diǎn)在于怎么判斷重復(fù)。
翻看了犀牛書后,又讀了一遍分組和引用的部分。使用小括號(hào)()將字符作為一個(gè)最小單元,同時(shí)小括號(hào)還能記憶這個(gè)組合相匹配的字符串。再使用反斜杠\引用前面分組的表達(dá)式,數(shù)字1表示第一個(gè)小括號(hào)。這時(shí)完成了2個(gè)字符重復(fù)的要求。最后再使用*來匹配出現(xiàn)0次或n次。這個(gè)正則表達(dá)式就寫完了。
下面詳細(xì)說說分組和引用。
正則表達(dá)式的選擇、分組和引用字符表
| 字符 | 含義 |
|---|---|
| | | 選擇,匹配的是該符號(hào)左邊的子表達(dá)式或右邊的子表達(dá)式 |
| (...) | 組合,將幾個(gè)項(xiàng)組合為一個(gè)單元,這個(gè)單元可通過* + ? | 等符號(hào)加以修飾,而且可以記住和這個(gè)組合相匹配的字符串以提供伺候的引用使用 |
| (?:...) | 只組合,把項(xiàng)組合到一個(gè)段元,但不記憶與該組相匹配的字符 |
| \n | 和第n個(gè)分組第一次匹配的字符相匹配,組是圓括號(hào)中的子表達(dá)式(也有可能是嵌套的),組索引是從左到右的左括號(hào)數(shù),(?:形式的分組不編碼 |
這篇文章就介紹到這了,希望大家以后多多支持腳本之家。
相關(guān)文章
javascript中使用正則表達(dá)式進(jìn)行字符串驗(yàn)證示例
我寫的一個(gè)表達(dá)式驗(yàn)證示例:功能如下:用戶名,不能為空;密碼6為數(shù)字;密碼確認(rèn),兩次輸入密碼必須相同;身份證號(hào)碼必須是15位,或者是18位,最末尾也可以是X2013-05-05
用Javascript正則實(shí)現(xiàn)url鏈接的解析類
一個(gè)非常健全的 Javascript 鏈接(URL)解析類,他用了正則表達(dá)式可以準(zhǔn)確獲取一個(gè)完整的 URL 中每個(gè)部分的內(nèi)容,包括協(xié)議、URL中包含的用戶名和密碼、主機(jī)名、端口、路徑名、參數(shù)、錨點(diǎn)(Fragment Anchor)等信息2008-06-06
Js 小數(shù)驗(yàn)證函數(shù)代碼(基于正則)
經(jīng)常需要使用JS來驗(yàn)證一些數(shù)字(OnKeyPress 事件和onblur事件來驗(yàn)證),寫了兩個(gè)事件來驗(yàn)證,驗(yàn)證了一般情況。2010-05-05
36個(gè)正則表達(dá)式(開發(fā)效率提高80%)
我們?cè)谌粘5腏ava開發(fā)中,經(jīng)常需要處理一些字符串,本文主要介紹了36個(gè)常用正則表達(dá)式,感興趣的可以了解一下2021-11-11
正則表達(dá)式(?=)正向先行斷言實(shí)戰(zhàn)案例
x(?=y)稱為先行斷言(Positive look-ahead),x只有在y前面才匹配,y不會(huì)被計(jì)入返回結(jié)果,比如要匹配后面跟著百分號(hào)的數(shù)字,可以寫成/\d+(?=%)/,這篇文章主要給大家介紹了關(guān)于正則表達(dá)式(?=)正向先行斷言的相關(guān)資料,需要的朋友可以參考下2022-11-11
你不一定知道的關(guān)于JavaScript的正則表達(dá)式
關(guān)于JavaScript中的正則表達(dá)式——,你不一定知道也可能用不到,但說不定哪天就會(huì)遭遇的幾個(gè)事實(shí)【新增一個(gè)】2010-09-09

