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

tec*_*000 6 javascript regex

正则表达专家请帮助看看这个问题是否可以通过正则表达式解决:

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

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

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

例如:str1 ="test xyz"; str2 ="test 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"));
Run Code Online (Sandbox Code Playgroud)

Mil*_*ith 18

正则表达式只识别字符串是否与某个模式匹配.他们没有足够的灵活性来进行比较,就像你要求的那样.您必须获取第一个字符串并基于它构建常规语言以识别第二个字符串,然后使用匹配组来获取第二个字符串的其他部分并将它们连接在一起.这是以可读的方式完成我认为你想要的东西.

//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"));
Run Code Online (Sandbox Code Playgroud)

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