在字符串中查找大写字母

23
我正在尝试编写一个函数,用于解密一个包含大写字母(表示是新单词)和小写字符(表示该单词本身)的加密消息。函数需要在加密消息中搜索所有大写字母,然后返回紧随其后的大写字符及其后面的小写字符。我已经获得了一个在解密函数内调用的函数:
function isUpperCase(aCharacter)    
{    
    return (aCharacter >= 'A') && (aCharacter <= 'Z');
}

我打算先在单词中搜索所有大写字母,并将其分配为一个新字符串。然后我可以使用while循环来选择新字符串中的每个字母,然后在旧字符串中搜索它旁边的小写字符。

然而,我完全卡在了第一步上 - 我甚至无法弄清结构化英语。

代码如下:

  • encryptMessage 是包含大写和小写字母的字符串
  • indexCharacter 将在以后用于另一个函数
  • upperAlphabet - 大写字母表 - 以后使用
  • lowerAlphabet - 小写字母表 - 以后使用

函数:

function decryptMessage(encryptMessage, indexCharacter, upperAlphabet, lowerAlphabet)
{
    var letter
    var word = "";

    for (var count = 0; count < encryptMessage.length; count = count +1);
    {
        letter = encryptMessage.charAt(count) 
        if (isUpperCase(letter));
        { 
            word = word + letter;       
        }
        document.write(word); //this is just to test to see if it returns the uppercase - I would use the return word
    }

以上代码似乎无法正常工作,因此我甚至无法继续进行其余的代码。有人能帮助我确定我错在了哪里吗?我完全是朝错误的方向去的吗?回头看一下,我觉得它并没有什么意义?这是一个非常基本的代码,我只学了for、while循环- if和else函数,我真的是太困惑了。

提前感谢您的建议:-)

Issy

6个回答

23

我不是太确定我理解了,但你可以使用replace方法和正则表达式来去除

var str = 'MaEfSdsfSsdfsAdfssdGsdfEsdf';
var newmsg = str.replace(/[a-z]/g, '');
var old = str.replace(/[A-Z]/g, '');
在这种情况下,newmsg = 'MESSAGE'。

感谢您的帮助,我学习的代码非常基础,包括for/while循环,if/else语句,charAt和indexOf函数 - 我知道这些都是非常基础的内容,但我就是无法理解。我有完整的HTML文档,但我不能在这里发布它,这样可能不太合适。 - user753420

7

检查字符串中大写字母的简单条件是...

var str = 'aBcDeFgHiJkLmN';
var sL = str.length;
var i = 0;
for (; i < sL; i++) {
    if (str.charAt(i) === str.charAt(i).toUpperCase()) {
        console.log('uppercase:',str.charAt(i));
    }
}

/*
    uppercase: B
    uppercase: D
    uppercase: F
    uppercase: H
    uppercase: J
    uppercase: L
    uppercase: N
*/

5

编辑

String input = "ThisIsASecretText";    

for(int i = 0; i < input.Length; i++)
{
  if(isUpperCase(input.charAt(i))
  {
     String nextWord = String.Empty;

     for(int j = i; j < input.Length && !isUpperCase(input.charAt(j)); j++)
     {
       nextWord += input.charAt(j);
       i++;
     }

     CallSomeFunctionWithTheNextWord(nextWord);
  }
}

以下调用将被执行:
  • CallSomeFunctionWithTheNextWord("This");
  • CallSomeFunctionWithTheNextWord("Is");
  • CallSomeFunctionWithTheNextWord("A");
  • CallSomeFunctionWithTheNextWord("Secret");
  • CallSomeFunctionWithTheNextWord("Text");
您可以使用正则表达式以更少的代码完成相同的操作,但由于您说您正在进行非常基础的编程课程,因此这种解决方案可能更合适。

嗨,感谢您的帮助。这差不多是我想要做的。基本上它会搜索第一个大写字符,然后返回其旁边的小写字符 - 字符串的这一部分将进入另一个函数,将字母与另一个字母表匹配(该函数的这一部分已完成)。然后它将回到原始消息,找到下一个大写字符并返回大写字母和旁边的小写字母,这将进入函数,依此类推。 - user753420
所以,如果我有一个消息字符串,例如KlptonPuuvTssi,它将返回Klpton,然后用于调用另一个函数,然后它将返回Puuv,然后是Tssi。我正在学习的课程非常基础 - 我们还没有学习像toLower这样的东西。我们只涵盖了for / while循环,charAt,indexOf,if和else :-) - user753420
好的,现在我明白你想做什么了。我会很快编辑我的答案。 - Christian
如果这正是您正在寻找的,请将我的答案标记为您问题的答案。谢谢! :) - Christian
你写的是Length而不是小写的length,这甚至不是有效的代码。 - PositiveGuy

4

使用Unicode 属性转义,特别是 "Lu" 通用属性类别,它匹配大写字母。还有针对数字、标点、货币以及任何你感兴趣的字符类别的属性。

在下面的示例中,“u”修饰符启用了Unicode匹配。

"HeLlo WoRld".match(/\p{Lu}/gu) // [ 'H', 'L', 'W', 'R' ]

0
请使用以下代码获取句子的首字母大写:

演示代码

var str = 'i am a Web developer Student';
var sL = str.length;
var i = 0;
for (; i < sL; i++) {
    if (str.charAt(i) != " ") {
      if (str.charAt(i) === str.charAt(i).toUpperCase()){
        console.log(str.charAt(i));
      }
    }
}

0
我更倾向于使用Array.reduce,如下所示: 比如说,例子sample = 'SampleStringAsFollows';
let capWord = [...sample].reduce((caps,char) => (char.match(/[A-Z]/)) ? caps + char : caps,'');

console.log(capWord); //SSAF

capWord将是一个由大写字母组成的字符串,还将处理边界情况,其中字符串可能包含特殊字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接