Javascript:比较两个字符串,跳过不同的字符

javascript: compare two strings, skip character which is different

本文关键字:字符 字符串 两个 比较 Javascript      更新时间:2023-09-26

现在当它到达两个字符串之间不同的字符时停止。有没有办法让它跳过一个不比较的字符?

var match = function (str1, str2) {
    str1 = str1.toString(); str2 = str2.toString();
    for (var i = 0; i < str1.length; i++) {
        for (var j = str1.length - i; j-1; j--) {
            document.body.innerHTML += str1.substr(i, j);
            if (str2.indexOf(str1.substr(i, j))!==  -1) {
                return str1.substr(i, j);
            }
        }
    }
    return '';
}
document.body.innerHTML += (match("/some[1]/where[1]/over[3]/here[1]", "/some[1]/where[1]/over[4]/here[1]"));
http://jsfiddle.net/92taU/3/

期望:/some[1]/where[1]/over[]/here[1]

这是你想要的:

var match = function (str1, str2) {
    str1 = str1.toString(); str2 = str2.toString();
    ret=''; i=0; j=0; l=str1.length; k=0; m=0;
    while(i<l && j<l)
    {
        // If char is equal just add!
        if(str1[i]==str2[j])
        {
            ret+=str1[i];
            i++;
            j++;
        } else {
            // If it's different search next equal char...
            for(k=i;k<l;k++)
            {
                for(m=j;m<l;m++)
                {
                    if(str1[k]==str2[m])
                    {
                        // if char is found adjust indexes and break current for
                        i=k;
                        j=m;
                        k=l; // to break m for
                        break;
                    }
                }
            }
        }
    }
    return ret;
}
document.body.innerHTML += (match("/some[1]/where[1]/over[3]/here[1]", "/some[1]/where[1]/over[4]/here[1]"));

它返回:

/some[1]/where[1]/over[]/here[1]

我假设你比较的两个字符串总是相同的长度。这里有一些代码,我认为应该做你想要的:

var match = function (str1, str2) {
    var i = 0;
    while (i < str1.length) {
        if (str1.substr(i, 1) !== str2.substr(i, 1)) {
            break;
        }
        i++;
    }
    if (i === str1.length) {
        return str1;
    } else {
        return str1.substr(0, i) + match(str1.substr(i + 1), str2.substr(i + 1));
    }
}
document.body.innerHTML += (match("/some[1]/where[1]/over[3]/here[1]", "/some[1]/where[1]/over[4]/here[1]"));

从每个字符串的开头开始,此代码查找最长的子字符串。当发现不匹配时,它获取匹配的子字符串,跳过下一个字符,并对每个字符串中的其余字符使用递归函数调用来重复该过程。