摘要:起因是看到一道題目的另外一種解法特別有意思,同時(shí)也做一點(diǎn)正則的筆記,好理解。
這是一篇普通的教程,同時(shí)也是我的一篇筆記。起因是看到一道題目的另外一種解法特別有意思,同時(shí)也做一點(diǎn)正則的筆記,好理解。
題目我印象中的這道題目是:
有一組數(shù)組為[1,1,2,3,3,3,3,4,5,5,5,6,6]
使用js
把它變成[[1,1],2,[3,3,3],4,[5,5,5].[6,6]]
解法有很多,我這里只列出兩種
解法一我們平時(shí)的解法一般為:
數(shù)組嵌套,將含有相同的值得數(shù)組放入新數(shù)組里面
然后對(duì)新數(shù)組進(jìn)行,對(duì)里面的嵌套數(shù)組進(jìn)行個(gè)數(shù)判斷并返回值,重新組成一個(gè)新數(shù)組
新數(shù)組就是答案
var arr = [1,1,2,3,3,3,3,4,5,5,5,6,6]; var tempArr = []; var result = []; var i,len,item,lastArr; for(i = 0,len = arr.length;i < len;i++){ item = arr[i]; lastArr = tempArr.slice(-1)[0]; if(!lastArr || lastArr[0] != item){ lastArr = []; tempArr.push(lastArr); } lastArr.push(item); } for(i=0,len=tempArr.length;i解法二1 ? item : item[0]); } console.log(result);
如果我們用正則的話,那解法如下:
var arr = [1,1,2,3,3,3,3,4,5,5,5,6,6]; var result = "[" + (arr.toString() + ",") .replace(/(([^,]+,)2+)/g,"[$1],") .replace(/,(]|$)/g,"$1") + "]"; console.log(JSON.parse(result));
這樣一下子就變得很高效,正則找出兩個(gè)以上的相同值的位置,插入[]
然后打印出來(lái)即可。
從這段代碼,我們可以看出,
先對(duì)把數(shù)組字符串化
var result = "[" + (arr.toString() + ",") + "]";
變成[1,1,2,3,3,3,3,4,5,5,5,6,6,]
然后匹配兩個(gè)以互為相同的值,套上[]
var result = "[" + (arr.toString() + ",") .replace(/(([^,]+,)2+)/g,"[$1],") + "]";
最后是找到]前面多余的,
var result = "[" + (arr.toString() + ",") .replace(/(([^,]+,)2+)/g,"[$1],") .replace(/,(]|$)/g,"$1") + "]";
JSON.parse(result)轉(zhuǎn)為數(shù)組對(duì)象,打印即可
正則表達(dá)式通過(guò)解法二,我們有時(shí)候面對(duì)一些問(wèn)題,其實(shí)還有更簡(jiǎn)單的解決方法
下面再補(bǔ)充一下正則的知識(shí)點(diǎn)
元字符從.replace(/(([^,]+,)2+)/g,"[$1],")中,正則部分是/(([^,]+,)2+)/g
其中最前面的“/”與最后面的“/”是分隔符,表示正則表達(dá)式的開始與結(jié)束.
這里再補(bǔ)充元字符的說(shuō)明
代碼 | 含義 |
---|---|
. | 匹配除換行符以外的任意字符 |
w | 匹配字母或數(shù)字或下劃線或漢字 |
W | 匹配任意不是字母或數(shù)字或下劃線或漢字的字符 |
s | 匹配任意的空白符 |
S | 匹配任意非空白符 |
d | 匹配數(shù)字 |
D | 匹配非數(shù)字 |
匹配單詞的開始或結(jié)束 | |
^ | 匹配字符串的開始 |
$ | 匹配字符串的結(jié)束 |
最后的“g”標(biāo)志表示正則表達(dá)式使用的global(全局)的狀態(tài).使用 global 標(biāo)志表明在被查找的字符串中搜索操作將查找所有符合的項(xiàng),而不僅僅是第一個(gè).這也被稱為全局匹配.【相關(guān)的標(biāo)志還有i(ignoreCase,表示忽略大小寫)、m(multiline,表示允許跨行)】,如下表所示
補(bǔ)充一下標(biāo)志
標(biāo)志 | 描述 |
---|---|
g | 全局搜索 |
i | 不區(qū)分大小寫搜索 |
m | 多行搜索 |
y | 執(zhí)行“粘性”搜索,匹配從目標(biāo)字符串的當(dāng)前位置開始,可以使用y標(biāo)志 |
然后我們?cè)賮?lái)看中間的主體部分(([^,]+,)2+)
字符組就是在[](方括號(hào))中列舉出所有的可能再去匹配,+是指匹配前面一個(gè)表達(dá)式1次或者多次,
補(bǔ)充一下限定符
代碼 | 含義 |
---|---|
* | 復(fù)零次或更多次 |
+ | 重復(fù)一次或更多次 |
? | 重復(fù)零次或一次 |
{n} | 重復(fù)n次 |
{n,} | 重復(fù)n次或更多次 |
{n,m} | 重復(fù)n到m次 |
.replace(/(([^,]+,)2+)/g,"[$1],")中的$1匹配到的部分的替換,替換成[$1],
匹配的部分,值得是兩個(gè)以上相同的值
.replace(/,(]|$)/g,"$1")就是去,]里的,
寫得好亂···
我這篇文章也用到了對(duì)URL的正則匹配
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/81587.html
摘要:返回值返回值根據(jù)傳入的參數(shù)類型和規(guī)則的不同,返回的內(nèi)容不同,但總體來(lái)說(shuō),它是返回一個(gè)對(duì)象,而不是索引,如果沒(méi)匹配到任何符合條件的字符串,則返回。 本文發(fā)布在我的博客一道小小的題目引發(fā)對(duì)javascript支持正則表達(dá)式相關(guān)方法的探討許可協(xié)議: 署名-非商業(yè)性使用-禁止演繹 4.0 國(guó)際 轉(zhuǎn)載請(qǐng)保留原文鏈接及作者。 以前對(duì)于正則是非常懼怕的,因?yàn)榭床欢蛯W(xué)不會(huì)。但最近項(xiàng)目中頻繁的...
摘要:之前的面試中,一直感覺(jué)模塊化沒(méi)有什么可以問(wèn)的,不過(guò)昨天面試突然想到一個(gè)題目對(duì)于一個(gè)的模式下文件如下很多代碼很多代碼很多代碼文件分別是什么時(shí)候加載的,如何加載的題目不難答案是和是在加載完后就加載。 showImg(https://segmentfault.com/img/bVseuJ); 模塊化現(xiàn)在應(yīng)該已經(jīng)成為了稍微復(fù)雜一點(diǎn)前端開發(fā)的標(biāo)配了。在es6中,都已經(jīng)支持了的模塊化。 之前的...
摘要:原文牛客上有這么一道的題目。先來(lái)分析一下題目,和都從來(lái),為什么同名的屬性值不一樣可以看出,是對(duì)這個(gè)函數(shù)的調(diào)用方式不一樣,是函數(shù)的調(diào)用結(jié)果,而則是作為構(gòu)造函數(shù)調(diào)用的結(jié)果。所以這題的重點(diǎn)應(yīng)該是如何區(qū)分函數(shù)調(diào)用和構(gòu)造函數(shù)調(diào)用。 原文:http://blog.e10t.net/talk-abo... 牛客上有這么一道 JavaScript 的題目。 //填寫內(nèi)容讓下面代碼支持a.name = ...
摘要:雖然有著各種各樣的不同,但是相同的是,他們前端優(yōu)化不完全指南前端掘金篇幅可能有點(diǎn)長(zhǎng),我想先聊一聊閱讀的方式,我希望你閱讀的時(shí)候,能夠把我當(dāng)作你的競(jìng)爭(zhēng)對(duì)手,你的夢(mèng)想是超越我。 如何提升頁(yè)面渲染效率 - 前端 - 掘金Web頁(yè)面的性能 我們每天都會(huì)瀏覽很多的Web頁(yè)面,使用很多基于Web的應(yīng)用。這些站點(diǎn)看起來(lái)既不一樣,用途也都各有不同,有在線視頻,Social Media,新聞,郵件客戶端...
摘要:因?yàn)樽鲆坏李},題目如下其中一個(gè)解答,引起了我對(duì)正則的研究興趣,解答如下我對(duì)正則表達(dá)式中的正向肯定預(yù)查一直不帶明白,所以趁這個(gè)機(jī)會(huì)研究一下。與此同時(shí),對(duì)象的更新為下一次開始匹配的索引值。 因?yàn)樽鲆坏李}(http://www.codewars.com/kata/insert-dashes/solutions/javascript),題目如下: Write a function insert...
閱讀 3032·2020-01-08 12:17
閱讀 2000·2019-08-30 15:54
閱讀 1158·2019-08-30 15:52
閱讀 2043·2019-08-29 17:18
閱讀 1053·2019-08-29 15:34
閱讀 2468·2019-08-27 10:58
閱讀 1869·2019-08-26 12:24
閱讀 380·2019-08-23 18:23