我正在尝试从coderbyte.com解决以下问题:
使用JavaScript语言,让函数SimpleSymbols(str)获取传递的str参数,并通过返回字符串true或false来确定它是否是可接受的序列。 str参数将由+和=符号组成,它们之间有几个字母(即。++ d + === + c ++ == a),如果字符串为true,则每个字母必须用+符号包围。所以左边的字符串是假的。该字符串不会为空,并且至少有一个字母。
以下是我的尝试:
function SimpleSymbols(str) {
// code goes here
var abc = 'abcdefghijklmnopqrstuvwxyz';
for (var i = 0; i < str.length; i++) {
if (abc.indexOf(str[i]) !== -1) {
if (str[i-1] + str[i+1] === "++") {
return true;
}
else {
return false;
}
}
}
}
这适用于以下情况:
SimpleSymbols("+a+d+"); // true
SimpleSymbols("+ab+d+"); // false
SimpleSymbols("b+d+"); // false
我发现唯一没有提供正确答案的案例是当有一封尾随字母时,例如:
SimpleSymbols("+a+b"); // true
返回true,实际上它应该返回false。
注意:我假设字符串将是小写的...我没有处理区分大小写,但我想让小写版本工作,然后我将使它独立于案例。
关于我的代码有什么问题的任何想法?
答案 0 :(得分:1)
我将此解释为:除了加号(包括无)之外,没有任何字母前面/之后没有字母:
function SimpleSymbols(str) {
return !/^[a-z]|[^+][a-z]|[a-z][^+]|[a-z]$/i.test(str)
}
答案 1 :(得分:0)
在由+符号包围的第一个成功字母上返回'true',它不会继续检查到最后。
我也想知道字符串索引是否会在第一个/最后一个字符上超出范围[i-1]
,[i+1]
?它似乎没有,但我找不到语言参考。
更好:
function SimpleSymbols(str) {
var abc = 'abcdefghijklmnopqrstuvwxyz';
for (var i = 0; i < str.length; i++) {
if (abc.indexOf(str[i]) !== -1) {
if (str[i-1] + str[i+1] != "++") {
return false;
}
}
}
return true;
}
也可能会有性能改进(通过AND检查边界字符而不是字符串添加),你也可以通过正则表达式来完成。
通过正则表达式:
if (str.search( /[^+][a-z]/) >= 0) // will match letters with no + beforehand.
return false;
if (str.search( /[a-z][^+]/) >= 0) // will match letters with no + afterward.
return false;
return true;
答案 2 :(得分:0)
我相信这是一个完美的正则表达式案例
检查正则表达式^[^a-z]*(\++[a-z]\++[a-z]?)*[^a-z]*$
解释in here
在javascript中使用它:
function SimpleSymbols(str) {
return !/^[^a-z]*(\++[a-z]\++[a-z]?)*[^a-z]*$/i.test(str);
}
答案 3 :(得分:0)
您可以使用正则表达式:
function SimpleSymbols(str) {
if (/^[a-zA-Z]/.test(str) || /[a-zA-Z]$/.test(str)) {
return false;
}
else if (/[^+][a-zA-Z]/.test(str) || /[a-zA-Z][^+]/.test(str)) {
return false;
}
else {
return true;
}
}
或
function SimpleSymbols(str) {
var arr = str.toLowerCase().split("");
for (var i = 0; i < arr.length; i++) {
if (arr[i] >= "a" && arr[i] <= "z") {
if (i === 0 || i === arr.length) {
return false;
}
if (arr[i-1] !== "+" || arr[i+1] !== "+") {
return false;
}
}
}
return true;
}