从两个不同的字符串中选择

时间:2015-06-10 15:14:47

标签: javascript regex

我的页面收到两个字符串:

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

我怎样才能实现它?提前谢谢。

2 个答案:

答案 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的代码类似,因为它从字符串的正面和背面进行搜索,而不是在每次迭代时使用indexOfaccidentally quadratic ),它进行标量字符比较。该函数将返回一个包含前缀和后缀的对象,以及两个被剥离的输入字符串。

&#13;
&#13;
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;
&#13;
&#13;