2013-11-09 59 views
0

我遇到了條件問題。我想返回模式以字符串開頭的索引(如果找不到則返回-1)。如果第三個參數爲true,則搜索將區分大小寫,否則它不區分大小寫。如果JavaScript中的其他條件在函數中

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/

回答

2

你的代碼有一些錯誤。您在第15行有

} 
return (found); 
else { 

這是無效的。更改爲

return (found); 
} 
else { 

還有一個。

if (caseSensitive = false) { 

=用於轉讓。比較時,您需要在if語句中使用==。 同樣在第13行,模式之後還有一個額外的.。去掉它。

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

Your fiddle example

0

你如果條件內分配值,而不是比較它。

嘗試

if (caseSensitive == false) { 

if(caseSensitive == true) 
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 
0

您需要在您的if, else報表中使用雙等號==

if(caseSensitive == false) 

而且

if(caseSensitive == true) 
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點菜CASSE:d)。