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

时间:2014-05-23 01:59:41

标签: javascript

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

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]

2 个答案:

答案 0 :(得分: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]

允许不同的长度。

答案 1 :(得分:0)

我假设您比较的两个字符串总是相同的长度。这里有一些代码可以做我认为你要求的:

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]"));

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