现在当它到达两个字符串之间不同的字符时停止。有没有办法让它跳过一个无法比较的角色?
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]"));
预期:/some[1]/where[1]/over[]/here[1]
答案 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]"));
从每个字符串的开头开始,此代码找到最长的子字符串。当找到不匹配时,它会抓取匹配的子字符串,跳过下一个字符,并使用每个字符串中剩余字符的递归函数调用重复该过程。