我有一个函数可以检查给定字符是否为大写字母并返回false值为false:
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;
}
}
}
}
你能否告诉我,我是否接近我想达到的目标?任何帮助将非常感激。
答案 0 :(得分:2)
可能正则表达可以帮助你
var re = /[A-Z][a-z]*/;
var s = 'ThksAbcdEvat';
s.replace(re, function(c){
//do something with c
return c;
});
答案 1 :(得分:1)
对于您所描述的内容(如果我理解正确),使用String.replace/split
将完成在其大写字母上拆分字符串的工作:
'ThksAbcdEvat'.replace(/(.(?=[A-Z]))/g,'$1,').split(',');
//=> Thks,Abcd,Evat
/(.(?=[A-Z]))/g
表示:找到任意字符后跟大写字母A到Z,替换字母'$1,'
表示:添加&#39;,&#39; (逗号)找到的角色。
之后,您可以运行循环以将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*/ );
}
}
我说,这里不需要复杂的while循环等。