0

我遇到了条件问题。我想返回模式以字符串开头的索引(如果找不到,则返回-1)。如果第三个参数为真,则搜索区分大小写,否则不区分大小写。

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));

小提琴http://jsfiddle.net/AfDFb/1/

4

5 回答 5

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
于 2013-11-09T15:42:24.377 回答
2

您的代码中有一些错误输入。在第 15 行,您有

}
return (found);
else {

这是无效的。将其更改为

return (found);
}
else {

还有一个。

if (caseSensitive = false) {

=用于赋值。比较时需要使用==in if 语句。同样在第 13 行,还有一个额外的.after 模式。去掉它。

if (string.indexOf(pattern.) >= 0) {

你的小提琴例子

于 2013-11-09T15:50:47.983 回答
0

==您需要在if, else语句中使用双等号。

if(caseSensitive == false)

if(caseSensitive == true)
于 2013-11-09T15:42:32.000 回答
0

你最好使用search

'abAB12'.search(/AB/); // 2
'abAB12'.search(/AB/i); // 0
'abAB12'.search(/BA/); // -1
'abAB12'.search(/BA/i); // 1

i标志的意思是“区分i大小写”(insensible à la casse :D )。

于 2013-11-09T15:42:58.477 回答
0

您在 if 条件中分配值而不是比较它。

尝试

 if (caseSensitive == false) {

 if(caseSensitive == true)
于 2013-11-09T15:40:34.863 回答