2013-12-11 50 views
3

用於檢測字符串中重複字母的代碼。在Javascript中檢測字符串中的重複字母

var str="paraven4sr"; 
var hasDuplicates = (/([a-zA-Z])\1+$/).test(str)   
alert("repeating string "+hasDuplicates); 

我得到 「假」爲上面的字符串 「paraven4sr」 輸出。但是這段代碼對像「paraaven4sr」這樣的字符串正常工作。我的意思是,如果字符連續重複,則代碼將輸出顯示爲「TRUE」。如何重寫這段代碼,這樣我會得到輸出爲「TRUE」當字符重複字符串

回答

21

JSFIDDLE

var str="paraven4sr"; 
var hasDuplicates = (/([a-zA-Z]).*?\1/).test(str)   
alert("repeating string "+hasDuplicates); 

正則表達式/([a-zA-Z])\1+$/正在尋找:

  • ([a-zA-Z]]) - 它在第一組中捕獲的一封信;然後
  • \1+ - 緊隨其後一個或多個該信件的副本;那麼
  • $ - 字符串的結尾。

它更改爲/([a-zA-Z]).*?\1/代替搜索:

  • ([a-zA-Z]) - 它在第一組中捕獲的信;那麼
  • .*? - 零個或多個字符(?表示儘可能少);直到
  • \1 - 它找到第一個匹配字符的重複。

如果您有第二場比賽必須在結束的字符串的要求,那麼你可以添加$正則表達式的結束,而是從你想要的東西,然後你的文字說明,這並似乎沒有必要。

+0

@MTO:謝謝 – Pavi

+1

如果您想要3個匹配,簡單地把\ 1 \ 1,如果你想4個匹配在正則表達式中放置\ 1 \ 1 \ 1) – Smile4ever

+0

@ MT0這裏是一個有關類似的問題。如果我有x =「1001」並使用x.match(/(\ d)\ 1 +/g) - >我得到「00」...但如果我使用它沒有全球我得到兩個匹配「00」和「0」...你能解釋一下嗎? – carinlynchin

0

這樣的事情?

String.prototype.count=function(s1) { 
    return (this.length - this.replace(new RegExp(s1,"g"), '').length)/s1.length; 
} 

"aab".count("a") > 1 

編輯:對不起,剛纔讀的你是不是搜索功能找到一個字母是否發現了不止一次,但更要找到一個字母是否是重複的。無論如何,我在這裏離開這個功能,也許它可以幫助。對不起;)

+2

請解釋你的解決方案,不要只是發佈代碼。 –

2

試試這個:

var str = "paraven4sr"; 
function checkDuplicate(str){ 
    for(var i = 0; i < str.length; i++){ 
     var re = new RegExp("[^"+ str[i] +"]","g"); 
     if(str.replace(re, "").length >= 2){ 
      return true; 
     } 
    } 
    return false; 
} 
alert(checkDuplicate(str)); 

下面是jsfiddle

+0

好,這行是什麼「g」varre = new RegExp(「[^」+ str [i] +「]」,「g」); 「 –

1

爲了只是測試重複的字母數字字符(包括下劃線_):

console.log(/(\w)\1+/.test('aab'));