首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较两个字符串和两个字符串中都不存在的返回值。

比较两个字符串和两个字符串中都不存在的返回值。
EN

Stack Overflow用户
提问于 2019-09-13 13:48:15
回答 2查看 1.2K关注 0票数 2

我需要(在JavaScript,也许使用RegEx?或者一些React组件)来比较两个字符串和粗体--所有的单词/字符都不存在于“源”字符串中。

例如:

“业务计划”与“业务计划”相比,应返回“业务pla__plafond”。

与“计划和监控”相比较的“业务计划”应返回“计划和监视”。

目前,我使用了这种方法,但不幸的是,并不是所有情况下,我都找不到这样的问题:

代码语言:javascript
运行
复制
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;
    }

有人能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-13 14:19:06

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

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

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

代码语言:javascript
运行
复制
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) (resp )。( b)。

票数 2
EN

Stack Overflow用户

发布于 2019-09-13 13:54:04

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

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

发现这很有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57924886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档