我遇到了条件问题。我想返回模式以字符串开头的索引(如果未找到,则返回-1)。如果第3个参数为true,则搜索区分大小写,否则不区分大小写。
Examples
index("abAB12","AB",true) returns 2 but index("abAB12","AB",false) returns 0
index("abAB12","BA",true) returns -1 and index("abAB12","BA",false) returns 1
知道我怎么能做到这一点吗?
这是我目前的代码
var s = "abAB12"
var p = "AB"
var cs = true
function index(string, pattern, caseSensitive) {
if (pattern) {
var found = false;
if (caseSensitive = false) {
if (string.indexOf(pattern.) >= 0) {
found = true;
}
return (found);
else {
return ("");
}
} else if (caseSensitive = true) {
if (string.toLowerCase().indexOf(pattern.toLowerCase()) >= 0) {
found = true;
}
return (found);
} else {
return ("");
}
}
}
alert(index(s, p, cs));
处小提琴
答案 0 :(得分:2)
您可以将string.search()
与正则表达式一起使用来完成此操作:
function index(input, key, caseMatters) {
return input.search(new RegExp(key, caseMatters ? '' : 'i'));
}
现在你可以:
index("abAB12","AB",true); // returns 2
index("abAB12","AB",false); // returns 0
index("abAB12","BA",true); // returns -1
index("abAB12","BA",false); // returns 1
答案 1 :(得分:2)
您的代码中有一些错误类型。在第15行你有
}
return (found);
else {
这不是无效的。将其更改为
return (found);
}
else {
还有另一个。
if (caseSensitive = false) {
=
用于作业。比较时,您需要在if语句中使用==
。
同样在第13行,在模式之后还有一个额外的.
。删除它。
if (string.indexOf(pattern.) >= 0) {
答案 2 :(得分:0)
如果是条件而不是比较它,则在内部分配值。
尝试
if (caseSensitive == false) {
和
if(caseSensitive == true)
答案 3 :(得分:0)
您需要在==
语句中使用双等号if, else
。
if(caseSensitive == false)
并且
if(caseSensitive == true)
答案 4 :(得分:0)
您最好使用search
:
'abAB12'.search(/AB/); // 2
'abAB12'.search(/AB/i); // 0
'abAB12'.search(/BA/); // -1
'abAB12'.search(/BA/i); // 1
i
标志表示“案例i
nsensitive”(i
nsensibleàlacasse:D)。