淺談正則表達式中的分組和引用實現方法

 更新時間:2020-01-15 15:59:36   作者:佚名   我要評論(0)

問題
在外刊君讀者群中看到有人提出這樣的一個需求:
把字符串切成連續相同字符的正則怎么寫?比如abbcccdddd切成a,bb,ccc,dddd
之前我對正則表達式也是略有研究,想

問題

在外刊君讀者群中看到有人提出這樣的一個需求:

把字符串切成連續相同字符的正則怎么寫?比如abbcccdddd切成a,bb,ccc,dddd

之前我對正則表達式也是略有研究,想嘗試一下。其實我對正則表達式的學習基本完全來源于犀牛書的第10章,真正看懂這一章,我覺得操作正則表達式應該不在話下。

我的答案

先給出我的答案吧:

'abbccddd'.match(/(\w)\1*/g) // ["a", "bb", "cc", "ddd"]

說明

拿到這個問題,首先要匹配字符[a-zA-Z0-9],這里直接使用\w。然后是全局匹配,在最后加上g。難點在于怎么判斷重復。

翻看了犀牛書后,又讀了一遍分組和引用的部分。使用小括號()將字符作為一個最小單元,同時小括號還能記憶這個組合相匹配的字符串。再使用反斜杠\引用前面分組的表達式,數字1表示第一個小括號。這時完成了2個字符重復的要求。最后再使用*來匹配出現0次或n次。這個正則表達式就寫完了。

下面詳細說說分組和引用。

正則表達式的選擇、分組和引用字符表

字符 含義
| 選擇,匹配的是該符號左邊的子表達式或右邊的子表達式
(...) 組合,將幾個項組合為一個單元,這個單元可通過* + ? | 等符號加以修飾,而且可以記住和這個組合相匹配的字符串以提供伺候的引用使用
(?:...) 只組合,把項組合到一個段元,但不記憶與該組相匹配的字符
\n 和第n個分組第一次匹配的字符相匹配,組是圓括號中的子表達式(也有可能是嵌套的),組索引是從左到右的左括號數,(?:形式的分組不編碼

這篇文章就介紹到這了,希望大家以后多多支持腳本之家。

相關文章

最新評論

买宝宝用品赚钱吗 同花顺股票软件下载 青海体彩十一选五走势图 11选5无死角每期必中 金服在线配资 票据理财平台排行榜 股票配资系统 今天黑龙江福彩22选5 上证指数(000001)新浪财经 四肖选一肖中特930 11选5开奖安徽 江苏11选五走势图定牛 极速时时彩彩开奖网站 11选5玩法 辽宁快乐12选5开奖 浙江十一选五直选玩法 流行的排列三杀码