indexOf匹配混乱

时间:2015-03-15 08:42:10

标签: javascript

我知道,indexOf会搜索第一个匹配的字符串。

这是我的示例代码:

Text = 'why/f l';
cmds = {
   "/f l" : ['Friends']
 }

for(var k in cmds){
        if (Text.indexOf(k) == 0){
        console.log('match!');
        console.log('function!' + cmds[k]);
        return // Return and stop!
        }
}

正如您所看到的那样...... why/f l不匹配,但/f l却匹配。为什么呢?我知道我可以使用.match,但我认为这会更快。是因为indexOf只在第一个字符的字符串开头处启动匹配过程吗?有点丢失,只是想弄清楚,谢谢!

2 个答案:

答案 0 :(得分:2)

IndexOf返回匹配字符串的第一个字符的索引,如果没有匹配则返回-1。

所以

"abcdef".indexOf("def")将返回3

你的if语句如下: if (Text.indexOf(k) == 0)

用简单的英语写成,如果Text以字符串k开头。

你可能意味着if (Text.indexOf(k) != -1)

如果Text包含字符串k,则以简单英语读取。

因为如果Text包含k,它将返回一个正数,否则它将返回-1。

答案 1 :(得分:2)

您的测试不正确。 indexOf方法返回(因为它的名字表示第一个匹配的索引)。因此,如果您想测试k是否为Text的子字符串,您可能需要修复测试:

if (Text.indexOf(k) > -1) {

以下是documentation对此的陈述:

  

indexOf()方法返回调用String中的索引   第一次出现指定值的对象,开始   在fromIndex搜索。如果找不到值,则返回-1。