javascript - 使用正则表达式查找 Javascript 中两个字符串之间的差异

标签 javascript regex

<分区>

请正则高手帮忙看看这个问题能不能用正则解决:

给定字符串 1 是任意字符串

字符串 2 是包含字符串 1 所有部分的任何字符串(但不是简单的匹配——我将举个例子)

如何使用正则表达式将字符串 2 中的字符串 1 的所有部分替换为空白,以便剩下的字符串不在字符串 1 中?

例如: str1 = "测试 xyz"; str2 = "测试 ab xyz"

我想要“ab”或“ab”回来。我可以编写什么正则表达式,以便当我在 str2 上运行替换函数时,它将返回“ab”?

这是一些非正则表达式代码:

            function findStringDiff(str1, str2) {
                var compareString = function(str1, str2) {
                    var a1 = str1.split("");
                    var a2 = str2.split("");
                    var idx2 = 0;
                    a1.forEach(function(val) {
                        if (a2[idx2] === val) {
                          a2.splice(idx2,1);
                        } else {
                            idx2 += 1;
                        }
                    });
                    if (idx2 > 0) {
                        a2.splice(idx2,a2.length);
                    }
                    return a2.join("");
                }

                if (str1.length < str2.length) {
                    return compareString(str1, str2);
                } else {
                    return compareString(str2, str1);
                }
            }

            console.log(findStringDiff("test xyz","test ab xyz"));

最佳答案

正则表达式仅识别字符串是否匹配特定模式。它们不够灵活,无法像您要求的那样进行比较。您必须使用第一个字符串并基于它构建一种常规语言来识别第二个字符串,然后使用匹配组来获取第二个字符串的其他部分并将它们连接在一起。这是一些以可读的方式做我认为你想要的东西。

//assuming "b" contains a subsequence containing 
//all of the letters in "a" in the same order
function getDifference(a, b)
{
    var i = 0;
    var j = 0;
    var result = "";

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

console.log(getDifference("test fly", "test xy flry"));

这是一个 jsfiddle:http://jsfiddle.net/d4rcuxw9/1/

关于javascript - 使用正则表达式查找 Javascript 中两个字符串之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29573700/

相关文章:

javascript 拆分和匹配不起作用(解析可扩展搜索)

javascript - 下拉列表未显示在 Bootstrap 输入组中

javascript - 为动态创建的组件分离 vuex 存储

javascript - 在框架上注入(inject) javascript

c# - 在 C# 中验证文件夹名称

javascript - 在加载所有 ajax 调用后如何调用函数?

regex - 即使在放置双斜杠之后,使用点 '.' 分割也无法使用 hive -e ""工作

java - 如何在java中删除单词模式后的逗号

python - nltk 正则表达式分词器

javascript - 如何从值 1 AM , 1 :30 AM and so on? 创建选择列表