2016-11-26 30 views
0

我試圖找到給定的數字串是否包含三個相同數字的序列。Javascript - 在正則表達式中使用連接字符串

使用for循環,字符串中的每個數字都有自己的一個三位數的序列,然後使用正則表達式檢查對字符串的表示:

var str = "6854777322" 

for(var i=0; i<str.length; i++) 
{ 
    seqToCompare = str[i] + str[i] + str[i]; 
    var re = new RegExp(seqToCompare, "g"); 
    if(str.match(re).length == 1) 
    { 
     match = str[i]; 
    } 
} 
console.log(match) 

結果應該是七(如果我把777在seqToCompare,它會工作),但它看起來像串聯導致它失敗。控制檯顯示「無法讀取null的屬性長度」。

你可以在這裏進行測試 - https://jsfiddle.net/kwnL7vLs/

我試過的ToString,在正則表達式的格式設置seqToCompare甚至解析它作爲INT(出於絕望了,不知道該怎麼辦了......)

+0

如果匹配失敗,結果是'null'並在第一次循環,對手失敗。 – vlaz

+0

謝謝!我確定它返回** 0 **而不是** null **,因爲比較發生了。 –

回答

3

而不是遍歷每個字符,你可以使用一個簡單的正則表達式來獲取重複3次位:

/(\d)(?=\1{2})/ 
  • (\d) - 在這裏,我們匹配一個數字和組它捕獲組#1
  • (?=\1{2})是先行斷言同捕獲組#1重複前面的當前位置的兩倍

RegEx Demo

+0

@NiviM這工作完成了嗎? – anubhava

0

anubhava的答案是要走的路,因爲它更高效和簡單。但是,如果您想知道爲什麼您的代碼特別錯誤,那是因爲您嘗試查找返回值爲str.match()length屬性,即使未找到匹配項也是如此。

試試這個:

var str = "6854777322" 

for(var i=0; i<str.length; i++) 
{ 
    seqToCompare = str[i] + str[i] + str[i]; 
    var re = new RegExp(seqToCompare, "g"); 
    if(str.match(re)) 
    { 
     match = str[i]; 
    } 
} 
console.log(match) 
相關問題