我的页面收到两个字符串:
var string1 = "_some_specification_ABC_DEFGH_end_code";
var string2 = "_some_specification_34_kj_w7_end_code";
我想把它们的不同之处放在后面作为标题显示
function selectRelevantInfo (string1, string2) {
// I don't know if some Regex could help here
};
它应该将 ABC_DEFGH 提供给 string1 ,将 34_kj_w7 提供给 string2 。
我怎样才能实现它?提前谢谢。
答案 0 :(得分:1)
试试这个:
var i;
var start;
var end;
for (var i = string1.length; i > 0; i--) {
if (string2.indexOf(string1.substr(0, i)) != -1) {
start = i;
break;
}
}
for (var i = start; i < string1.length; i++) {
if (string2.indexOf(string1.substr(i, string1.length)) != -1) {
end =i;
break;
}
}
var dif1 = string1.substr(start, string1.length - end);
var dif2 = string2.substr(start, string2.length - end);
当然它可以进行优化以支持不同的东西,并检查是否真的存在差异和其他东西,但是开始这可能非常有用
答案 1 :(得分:1)
这是我的尝试,通过一些测试来确保前缀/后缀不存在时,或者如果它们都是字符串等,一切都很好。
它在精神上与Pablo的代码类似,因为它从字符串的正面和背面进行搜索,而不是在每次迭代时使用indexOf
(accidentally quadratic ),它进行标量字符比较。该函数将返回一个包含前缀和后缀的对象,以及两个被剥离的输入字符串。
function findPrePostfix(a, b) {
var minLength = Math.min(a.length, b.length);
// Important initialization and prefix search
var preLen = minLength;
for (var i = 0; i < minLength; i++) {
if (a[i] !== b[i]) {
preLen = i;
break;
}
}
// Similar search for postfix search plus an important initialization
var postLen = minLength - preLen;
for (var i = 0; i < minLength - preLen; i++) {
if (a[a.length - i - 1] !== b[b.length - i - 1]) {
postLen = i;
break;
}
}
return {
a : a.substring(preLen, a.length - postLen),
b : b.substring(preLen, b.length - postLen),
prefix : a.substring(0, preLen),
postfix : a.substring(a.length - postLen, a.length)
};
}
function display(a, b) {
$("body").append("<p>“" + a + "” vs “" + b + "”: <tt>" +
JSON.stringify(findPrePostfix(a, b)) + "</tt></p>");
}
// display = function(a, b) { console.log(findPrePostfix(a, b)) };
display('_some_specification_ABC_DEFGH_end_code',
'_some_specification_34_kj_w7_end_code');
display("abc123", "123");
display("abc", "abc123");
display("abc", "def");
display("abc", "abc");
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;