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

时间:2016-10-18 15:27:27

标签: regex

我已经提供了两个示例输入字符串:

"俄罗斯在德国入侵后进入二战[A] [B]并且#34;

"俄罗斯在德国入侵后于1941年9月进入二战并且#34;

在第一个字符串中[A]和[B]之前,之后和之间可以有任何字符,并且可能有其他占位符,例如[C] [D]等。每个占位符只能出现一次。

我如何使用正则表达式匹配" 9月"和" 1941"?

我需要在单个正则表达式中匹配每个占位符,而不是多个步骤。

我对解决方案的想法

我猜测解决方案将是:

'匹配字符串2中的所有内容,在字符串1中的[A]之前的所有内容之前,以及在字符串1中的[A]之后的所有内容之前#39;

我想出(.*(:?\[A\]))((:?\[A\]).*)来获取第一个字符串中[A]之前和之后的文字,但无法弄清楚如何使用它来查看第二个字符串串。也许我需要用某种分隔符连接这两个东西并查看分隔符的两边?

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,您希望匹配[A][B]周围的片段,以便在第二个字词中搜索各自的值。您可以分两步完成此操作。首先,您需要提取[A][B]周围的字词。这可以使用以下正则表达式完成:^(.*?)(\[A\])(.*?)(\[B\])(.*?)$。在第二步中,您需要从第一个结果中创建一个新的正则表达式。三个匹配的组(圆括号中的值组成一个组)将成为术语[A][B]周围的片段。然后,您需要从这三个片段中创建一个新的正则表达式。这里,每种编程语言的实现都不同。在JavaScript中,匹配对象可用于创建新的正则表达式,如下所示:new RegExp(matches1[1] + '(.*?)' + matches1[2] + '(.*?)' + matches1[3])。最后,您最终得到了两个值的匹配。

此处,示例在JavaScript中实现:

var text1 = "Russia has entered the WWII in [A] [B] after german invasion";
var regex1 = new RegExp(/^(.*?)\[A\](.*?)\[B\](.*?)$/);
var matches1 = text1.match(regex1);

var text2 = "Russia has entered the WWII in September 1941 after german invasion";
var regex2 = new RegExp(matches1[1] + '(.*?)' + matches1[2] + '(.*?)' + matches1[3]);
var matches2 = text2.match(regex2);

console.log(matches2[1]);
console.log(matches2[2]);