Javascript:将动态字符串与数组匹配

时间:2013-03-21 03:51:36

标签: javascript

我试图自学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字符匹配
  • 如果它们都匹配,则将它们推送到命中数组

我的问题:我不知道如何在没有嵌套相当多if语句的情况下迭代数组,即便如此,考虑到我希望程序能够处理任何输入,这还不够。

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

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

4 个答案:

答案 0 :(得分:1)

您可以尝试:

if (source.indexOf(searchString) !== -1) {
// Match!
}
else
{
//No Match!
}

答案 1 :(得分: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
        }
    }
};

答案 2 :(得分: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
        }
    }
};

此功能会找到source中找到searchString的所有位置。 (当然,你可以在第一次成功时突破循环。)逻辑是使用外部循环前进到source中的每个候选起始位置并使用内部循环来测试该位置是否实际是匹配到searchString的位置。

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

答案 3 :(得分:0)

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

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

通过这种方式,您可以获得所需的所有数据,以确定每次点击在源中发生的位置,如果这对您很重要。