国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從一道JavaScript題目學(xué)點(diǎn)正則

rollback / 849人閱讀

摘要:起因是看到一道題目的另外一種解法特別有意思,同時(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é)束
標(biāo)志

最后的“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

相關(guān)文章

  • 一道小小的題目引發(fā)對(duì)javascript支持正則表達(dá)式相關(guān)方法的探討

    摘要:返回值返回值根據(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)目中頻繁的...

    Scholer 評(píng)論0 收藏0
  • AMD的一道面試題

    摘要:之前的面試中,一直感覺(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)支持了的模塊化。 之前的...

    xiaoqibTn 評(píng)論0 收藏0
  • 說(shuō)說(shuō)牛客上的一道 JavaScript 題目

    摘要:原文牛客上有這么一道的題目。先來(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 = ...

    jk_v1 評(píng)論0 收藏0
  • 前端優(yōu)化 - 收藏集 - 掘金

    摘要:雖然有著各種各樣的不同,但是相同的是,他們前端優(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,新聞,郵件客戶端...

    VincentFF 評(píng)論0 收藏0
  • JS中正則表達(dá)式研究(一)

    摘要:因?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...

    zhouzhou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<