列印結果:
2.1var reg =/(.)\1/g;實現了對字串中連續兩個或兩個以上的字元匹配,改正規表示式實際上等價於:/(.)\1+/g。 其中(.)表示匹配任意字元,在正規表示式中的小括號"()「代表分組的意思。 如果再其後面出現\1則是代表與第乙個小括號中要匹配的內容相同,同理,例如「/(.)/1(\d)/2/g」中的「/2」代表的就是」(\d)",其餘的以此類推,$1和$2則分別表示第乙個小括號和第二個小括號所匹配到的內容。「1」後面的「+」表示「\1」的次數,這裡其實就相當於至少有乙個「\1」,也就是再加上前面的「(.)」就表示可以匹配至少兩個連續的字元了。
2.2這裡其實是實現字串去重的其中一種方法了,具體是通過字元的replace方法來實現的,replace接收兩個引數,第乙個為要替換的部分,也可以是正規表示式,第二個引數表示要替換的目標內容,由上面的列印結果可知,[「bb」, 「ccc」, 「eeee」, 「aa」]為正規表示式所匹配到的內容,由於是全域性匹配,所以"$1"則表示第乙個小括號"(.)"所匹配到的單個字元,然後再將通過正規表示式所匹配到的內容全部換成單個字元就可以實現字串去重了。
⚠️注意
正則中的\1、\2
單獨斜槓的 \1 , \2 表示的是反向引用:
『\1』 匹配的是 所獲取的第1個()匹配的引用。例如,』(\d)\1』 匹配兩個連續數字字元。如33aa 中的33
『\2』 匹配的是 所獲取的第2個()匹配的引用。例如,』(\d)(a)\1』 匹配第一是數字第二是字元a,第三\1必須匹配第乙個一樣的數字重複一次,也就是被引用一次。如9a9 被匹配,但9a8不會被匹配,因為第三位的\1必須是9才可以,『(\d)(a)\2』 匹配第乙個是乙個數字,第二個是a,第三個\2必須是第二組()中匹配一樣的,如,8aa被匹配,但8ab,7a7不會被匹配,第三位必須是第二組字元的複製版,也是就引用第二組正則的匹配內容。
字串去重
字串去重,思路是在乙個字串例如 strstrrtsiiiinnnggggg 中,遍歷所有的字元,拼接到stringbuffer中。在執行速度上來看stringbuffer的拼接速度要快與string。通過str.charat i 的方法得到當前遍歷到的字元。通過indexof方法得到該字元第一次出現...
字串去重
doctype html en utf 8 viewport content width device width,initial scale 1.0 document title head 思路 1.宣告乙個空字元 2.將需要去重字元,乙個乙個新增到空字串中 條件 s裡面沒有這個字元,就加進去 v...
字串右旋 字串去重
1.將n個字元的陣列,迴圈右移k位。時間複雜度o n 實現思路 兩種實現思路 1.借助輔助空間,按照後面的順序進行拷貝,最後拷貝回字串 2.三次反轉法就可實現 include void rotatekth char str,int size,int k 2.附加題 刪除小寫字母字串中重複字元。如果可...