1

我正在尝试自学javascript。我选择了一些我认为很简单的东西,但很快就遇到了问题。

我正在尝试在一个字符串中搜索用户给出的另一个字符串。

到目前为止,我的代码是:

var source = "XREs2qqAQfjr6NZs6H5wkZdOES5mikexRkOPsj6grQiYNZfFoqXI4Nnc1iONKVrA";
var searchString = []; //the users input
searchString = prompt("Enter search string");
var hits = [];
var one = 0;
var two = 0;
var k = 0;

var sourceSearch = function(text) {
    for(i = 0; i < source.length; i++) { //for each character in the source
        if(source[i] === searchString[0]) {  //if a character in source matches the first element in the users input
            one  = source.indexOf(i); //confused from here on
            for(p = searchString.length; p > 0; p--) {

            }                    
        }
    }
};


sourceSearch(searchString);

我的想法是:

  • 检查第一个循环是否找到与用户输入中的第一个字符匹配的字符
  • 如果匹配,则检查第一个字符之后的下一个 X 字符是否与源字符串中的下一个 X 字符匹配
  • 如果它们都匹配,则将它们推送到 hits 数组

我的问题:我不知道如何在不嵌套很多 if 语句的情况下遍历数组,即使这样,考虑到我希望程序可以处理任何输入,这也是不够的。

任何想法都会有所帮助。首先十分感谢。

注意:我正在测试的想法中有一些未使用的变量,但我无法使它们起作用。

4

4 回答 4

1

你可以试试:

if (source.indexOf(searchString) !== -1) {
// Match!
}
else
{
//No Match!
}
于 2013-03-21T03:54:55.557 回答
0

要遵循您的方法,您可以使用 2 个索引:

var sourceSearch = function(text) {
    j = 0;
    for(i = 0; i < source.length; i++) {
        if(source[i] === text[j]) {
            j++;                   
        } else {
            j = 0;
        }
        if (j == text.length) {
            console.log(i - j); //this prints the starting index of the matching substring
        }
    }
};
于 2013-03-21T04:03:04.677 回答
0

正如到目前为止的其他答案所指出的那样,JavaScript 字符串有一个indexOf功能可以满足您的需求。如果你想看看它是如何“手工”完成的,你可以像这样修改你的函数:

var sourceSearch = function(text) {
    var i, j, ok; // always declare your local variables. globals are evil!
    // for each start position
    for(i = 0; i < source.length; i++) {
        ok = true;
        // check for a match
        for (j = searchString.length - 1; ok && j >= 0; --j) {
            ok = source[i + j] === searchString[j];
        }
        if (ok) {
            // searchString found starting at index i in source
        }
    }
};

此函数将查找找到的所有位置sourcesearchString(当然,你可以在第一次成功时跳出循环。)逻辑是使用外循环前进到每个候选开始位置,source并使用内循环测试该位置是否真的是匹配的位置到searchString.

这不是搜索字符串的最佳算法。内置算法要快得多(既是因为它是一种更好的算法,也是因为它是本机代码)。

于 2013-03-21T04:03:21.463 回答
0

这些答案都很好,但我可能会选择这样的东西:

var source = "XREs2qqAQfjr6NZs6H5wkZdOES5mikexRkOPsj6grQiYNZfFoqXI4Nnc1iONKVrA";
var searchString = []; //the users input
searchString = prompt("Enter search string");
var hits = source.split(searchString);
var hitsCount = hits.length - 1;

这样,您就拥有了所有需要的数据,如果这对您很重要,那么您就可以确定每次点击在他的来源中发生的位置。

于 2013-03-21T05:21:53.733 回答