问题描述
|
我有一个检查给定字符是否为大写字母并返回false值的true的函数:
function isUpperCase(aCharacter)
{
return (aCharacter >= \'A\') && (aCharacter <= \'Z\');
}
现在我有一个字符串,例如ThksAbcdEvat
。
我想编写一个检查字符串中每个字符的函数,当它遇到大写字母时将执行函数decryptW
,但仅在一个字母块上执行,直到下一个大写字母为止。
函数cryptineW在单个单词上正常工作。因此,我正在寻找的是在\'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,cipherAlphabet);
lastCapital = count;
}
}
}
}
你能告诉我我是否接近我想要达到的目标吗?任何帮助将非常感激。
解决方法
正则表达式可能会帮助您
var re = /[A-Z][a-z]*/;
var s = \'ThksAbcdEvat\';
s.replace(re,function(c){
//do something with c
return c;
});
,对于您所描述的内容(如果我理解正确的话),使用ѭ5可以完成将字符串拆分为大写的工作:
\'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,\');
for (var i=0;i<capitalWords.length;i++){
decryptWord(captalWords[i] /*,... other params*/ );
}
}
我会说,这里实际上不需要复杂的while循环等。