gpt4 book ai didi

javascript - 如何比较两个字符串并获得不同的部分

转载 作者:行者123 更新时间:2023-12-03 12:06:34 27 4
gpt4 key购买 nike

现在我有两个字符串,

var str1 = "A10B1C101D11";
var str2 = "A1B22C101D110E1";

我想做的是区分它们之间的区别,结果如下

A10B1C101D11

A10 B22 C101 D110E1

它遵循相同的模式,一个字符和一个数字。如果 Angular 色不存在或者它们之间的数字不同,我会说它们不同,并突出显示不同的部分。正则表达式可以做到这一点还是有其他好的解决方案?提前致谢!

最佳答案

首先我要指出的是,正则表达式可能不是最好的工具。由于字符串具有您知道的简单格式,因此将字符串解析为标记然后比较标记会更快、更安全。

但是,您可以使用正则表达式来做到这一点,尽管在 javascript 中,您会因缺乏lookbehind而受到阻碍。

执行此操作的方法是使用负向前查找来防止其他字符串中包含的匹配。然而,由于 javascript 不支持lookbehind,您可能需要从两个方向进行搜索。

我们通过使用可以测试的分隔符连接字符串来实现此目的。

如果使用“|”作为分隔符,正则表达式变为;

/(\D\d*)(?=(?:\||\D.*\|))(?!.*\|(.*\d)?\1(\D|$))/g

查找第二个字符串中不存在于第一个字符串中的标记;

var bothstring=str2.concat("|",str1);
var re=/(\D\d*)(?=(?:\||\D.*\|))(?!.*\|(.*\d)?\1(\D|$))/g;
var match=re.exec(bothstring);

对 re.exec 的后续调用将返回稍后的匹配项。因此您可以像下面的示例一样迭代它们;

while (match!=null){
alert("\""+match+"\" At position "+match.index);
match=re.exec(t);
}

如上所述,这在 str2 中给出了与 str1 中不同的标记。要获取 str1 中不同的标记,请使用相同的代码,但在连接字符串时更改 str1 和 str2 的顺序。

如果处理潜在的脏输入,上面的代码可能不安全。特别是,如果输入像“A100|A100”这样的字符串,则可能会出现错误,第一个 A100 将不会被视为缺少对象,因为正则表达式不知道源应该是两个不同的字符串。如果这是一个潜在问题,则搜索是否出现分隔字符。

关于javascript - 如何比较两个字符串并获得不同的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25165485/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com