比较两个字符串并返回两个字符串中不存在的值

时间:2019-09-13 13:48:15

标签: javascript regex reactjs

我需要(在JavaScript中,也许使用RegEx?或某些React组件)来比较两个字符串,并以粗体显示“源”字符串中不存在的所有单词/字符

例如:

商业计划”与“ 商业计划”相比,应返回“ 商业计划喜欢 ” < / p> 附有“ 计划和监视”的

商业计划”应返回“ 计划和监视 ” < / p>

当前,我使用此方法有效,但不幸的是,并非在所有情况下都无法找到问题:

compareStrings(a, b) {
let i = 0;
let j = 0;
let result = "";

while (j < b.length)
{
    if (a[i] === ' ') {
        i++;
    } else {
        if ((a[i] != b[j]) || (b[j] === ' ') || i == a.length)
            result += b[j];
        else i++;
        // }
    }

    j++;
}
        return result;
    }

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

从您的示例中,我建议使用以下字符串比较策略:

  • 考虑必须将ab字符串化
  • 逐个字符获取b,并在a中找到它的第一个匹配项
  • 如果不匹配,请尝试在a仍然出现的b中找到另一个偏移量
  • 如果不再出现这种偏移,则您发现最长的公共字符序列,可以开始用粗体标记b的其余字符

如果这是您想要实现的,则可以尝试对算法进行以下改进:

function compareStrings(a, b) {
  let i = 0;
  let j = 0;
  let search = '';  // current search term (substring of b)

  while (j < b.length) {
    search += b[j];  // add another character of b to search string
    if (a.indexOf(search) > -1) {  // search is found in b, continue
      j++;
    } else {
      return b.substr(j);  // return remaining substring of b which is not part of a
    }
  }
}

console.info(compareStrings('business plan', 'business plafond'));  // fond
console.info(compareStrings('business plan', 'plan and monitoring')); // and monitoring

我已经看到在您的原始代码中,您还希望跳过空格字符;但是,我不太了解这种行为是否会导致错误的输出...如果您想完全忽略空格,请尝试使用a.replace(/\s/g)(与b对应)。

答案 1 :(得分:0)

执行文本差异实际上是一项非常复杂的任务,您可能需要微调差异执行方式的各种参数,以获得所需的结果。我最近尝试过:

https://www.npmjs.com/package/diff

发现它非常有用。