淺談?wù)齽t表達(dá)式中的分組和引用實(shí)現(xiàn)方法
問題
在外刊君讀者群中看到有人提出這樣的一個(gè)需求:
把字符串切成連續(xù)相同字符的正則怎么寫?比如abbcccdddd切成a,bb,ccc,dddd
之前我對正則表達(dá)式也是略有研究,想嘗試一下。其實(shí)我對正則表達(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ù)。
翻看了犀牛書后,又讀了一遍分組和引用的部分。使用小括號()將字符作為一個(gè)最小單元,同時(shí)小括號還能記憶這個(gè)組合相匹配的字符串。再使用反斜杠\引用前面分組的表達(dá)式,數(shù)字1表示第一個(gè)小括號。這時(shí)完成了2個(gè)字符重復(fù)的要求。最后再使用*來匹配出現(xiàn)0次或n次。這個(gè)正則表達(dá)式就寫完了。
下面詳細(xì)說說分組和引用。
正則表達(dá)式的選擇、分組和引用字符表
字符 | 含義 |
---|---|
| | 選擇,匹配的是該符號左邊的子表達(dá)式或右邊的子表達(dá)式 |
(...) | 組合,將幾個(gè)項(xiàng)組合為一個(gè)單元,這個(gè)單元可通過* + ? | 等符號加以修飾,而且可以記住和這個(gè)組合相匹配的字符串以提供伺候的引用使用 |
(?:...) | 只組合,把項(xiàng)組合到一個(gè)段元,但不記憶與該組相匹配的字符 |
\n | 和第n個(gè)分組第一次匹配的字符相匹配,組是圓括號中的子表達(dá)式(也有可能是嵌套的),組索引是從左到右的左括號數(shù),(?:形式的分組不編碼 |
這篇文章就介紹到這了,希望大家以后多多支持腳本之家。
相關(guān)文章
JavaScript正則方法replace實(shí)現(xiàn)搜索關(guān)鍵字高亮顯示
這里介紹的是JavaScript的正則表達(dá)式的replace方法 ,和實(shí)現(xiàn)搜索關(guān)鍵字高亮的功能.先介紹一下正則表達(dá)式的replace方法,具體內(nèi)容詳情大家參考下本文2017-09-09JavaScript系列文章:詳解正則表達(dá)式基本知識
正則表達(dá)式是一個(gè)精巧的利器,經(jīng)常用來在字符串中查找和替換,這篇文章主要介紹了js正則表達(dá)式基本語法,有興趣的同學(xué)可以了解一下。2016-12-12正則表達(dá)式匹配(URL、電話、手機(jī)、郵箱)的實(shí)例代碼
本文通過實(shí)例代碼給大家介紹了正則表達(dá)式匹配(URL、電話、手機(jī)、郵箱)的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-08-08