好的,我有一个函数可以检查字母是否为大写,并返回'true'或'false'值。
function isUpperCase(aCharacter) {
return (aCharacter >= 'A') && (aCharacter <= 'Z');
}
现在我想检查一串字符,例如'adfdfZklfksPaabcWsgdf'并且在程序遇到大写字母后,它将在此字母后面的所有小字母上执行函数decryptWord,直到下一个大写字母等等。函数decryptWord在单个单词上工作得很好我只是不能让它在多个单词上工作;(
function decryptMessage(cipherText, indexCharacter, plainAlphabet, cipherAlphabet) {
for (var count = 0, count < cipherText.length; count++) {
if (isUpperCase(cipherText.charAt(count))) {
decryptWord(cipherText, indexCharacter, plainAlphabet, cipherAlphabet)
} else {
//i dont know what to do next
}
}
}
你可以告诉我,我是否朝着正确的方向前进?
答案 0 :(得分:10)
您是否考虑过在每个大写字符之前拆分的正则表达式?例如
"AdfdfZklfksPaabcWsgdf".split(/(?=[A-Z])/);
结果:
["Adfdf", "Zklfks", "Paabc", "Wsgdf"]
这样,您可以一次管理一个“单词”;每个的第一个字符总是大写的,其余的都是小写的。
答案 1 :(得分:1)
您的isUpperCase
函数返回false
作为空格字符,因此代码将空格字符和小写字符视为相同。这可能就是为什么它会抨击多个单词而不是单个单词。
为什么不split
non-word characters上的输入,而不是处理大写和小写字母?像这样:
var words = cipherText.split(/\W/), // \W means non-word characters
numWords = words.length;
for (var i = 0; i < numWords; i++) {
decryptWord(words[i]);
}
答案 2 :(得分:0)
我建议在decryptMessage
函数中使用两个变量。第一个变量last_caps
将存储前一个大写字母的索引。第二个变量是count
,它的工作方式非常类似。这允许您知道上一个大写字母的位置,因此当您找到下一个大写字母时,您可以在它们之间的小写字母上使用decryptWord
。
for循环的迭代
count
处的字符为大写,则:
count - last_caps > 1
,那么:
decryptWord
解密从last_caps
开始到count
结束的子字符串。根据需要操纵值以包含/排除大写字母。last_caps
覆盖count
。 (last_caps = count
)for
迭代结束。答案 3 :(得分:0)
列是字符串数组,并保留完整的大小写,例如大写或小写
function cipherText(columns) {
for (var i = 0; i < columns.length; i++) {
if (!isAnyCase(columns[i])) {
columns[i] = columns[i].split(/(?=[A-Z])/).join(" ");
}
}
return columns;
}
function isAnyCase(text) {
return (text == text.toUpperCase() || text == text.toLowerCase());
}
调用函数
var columns = cipherText(arr);
答案 4 :(得分:0)
要在Capital Letter上拆分的JavaScript函数:
String.prototype.splitForCapitalLetters = function () {
var string = this;
if (string.length) {
string = string.split(/(?=[A-Z])/);
}
return string;
};
呼叫:
"AnyString".splitForCapitalLetters();
结果:
["Any", "String"]