2011-05-23 88 views
0

爲大寫字母檢查我有檢查,如果給定的字符是大寫字母,並返回假true值的函數:While循環串

function isUpperCase(aCharacter) 
{ 
    return (aCharacter >= 'A') && (aCharacter <= 'Z'); 
} 

現在我有字符的字符串,例如ThksAbcdEvat

我想寫一個函數,它檢查字符串中的每個字符,當它遇到一個大寫字母時,將執行函數decryptW,但只在一個字母塊,直到下一個大寫字母。

函數decryptW在單個單詞上工作正常。所以我在尋找的是'Thks''Abcd''Evat'上的函數'decryptW'的執行,並返回3個單詞。我現在所有的是:

function decryptMessage(cipherText, indexCharacter, plainAlphabet, cipherAlphabet) 
{ 
    for (var count = 0, count < cipherText.length; count++) 
    { 
     while (isUpperCase(cipherText.charAt(count)) 
     { 
      if (count - lastCapital > 1) 
      { 
       decryptWord(cipherText, indexCharacter, plainAlphabet, cipherAlphabet); 
       lastCapital = count; 
      } 
     } 
    } 
} 

你能告訴我,如果我甚至接近我想實現的目標嗎?任何幫助將非常感激。

回答

1

對於您使用String.replace/split會做分裂在其首都的字符串的工作描述是什麼(如果我理解正確的):

'ThksAbcdEvat'.replace(/(.(?=[A-Z]))/g,'$1,').split(','); 
//=> Thks,Abcd,Evat 

其中/(.(?=[A-Z]))/g指:找到任何字符後跟一個大寫字母A到Z ,替換('$1,')表示:向找到的字符添加','(逗號)。

之後,您可以運行一個循環,將decryptWord應用於數組中的每個單詞(/g表示:全局,即對整個字符串執行該操作)。所以,你的整個decryptMessage功能可能看起來像:

function decryptMessage(cipherText /*,... other params*/){ 
    var captalWords = cipherText.replace(/(.(?=[A-Z]))/g,'$1,').split(','); 
    for (var i=0;i<capitalWords.length;i++){ 
    decryptWord(captalWords[i] /*,... other params*/); 
    } 
} 

我會說,對於複雜的沒有真正的需要,同時循環等在這裏。

2

也許正則表達式可以幫助你

var re = /[A-Z][a-z]*/; 
var s = 'ThksAbcdEvat'; 
s.replace(re, function(c){ 
    //do something with c 
    return c; 
});