同时循环检查字符串中的大写字母

While loop checking for capital letters in string

本文关键字:大写字母 字符串 检查 循环      更新时间:2023-09-26

>我有一个函数,可以检查给定字符是否为大写字母并返回假值的真:

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

现在我有一串字符,例如 ThksAbcdEvat .

我想编写一个函数来检查字符串中的每个字符,当它遇到大写字母时,将执行函数decryptW但仅在字母块上执行,直到下一个大写字母。

函数解密W在单个单词上工作正常。因此,我正在寻找的是执行函数"decryptW"对"Thks"Abcd"Evat",并返回 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;
            }
        }
    }
}

你能告诉我我是否接近我想要实现的目标吗?任何帮助将不胜感激。

可能正则表达式可以帮助你

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

对于您所描述的内容(如果我理解正确),使用 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*/ );
  }
}

我想说的是,这里不需要复杂的循环等。