Я пытаюсь создать регулярное выражение, которое покажет две подстроки в данной строке, и возвращаемое значение должно быть массивом, содержащим два элемента, две совпадающие строки.Я понимаю, что моя проблема тесно связана с палиндромом, который не может быть реализован как регулярное выражение, но я надеюсь, что есть регулярное выражение, которое подойдет достаточно близко, поскольку есть структура конечного размера, которую я ожидаю прочитать.
Чтобы быть очень конкретным, я забочусь только о сопоставлении двух дочерних элементов верхнего уровня, так как в первом примере любое количество вложенных скобок внутри не имеет никакого значения, независимо от того, их 1 или 99999.
Обратите внимание, что интервал просто для удобства чтения, и во входной строке не будет пробелов.Эта структура просто:
{ }{ }
и должна быть принята в виде двух строк:
{ } and { }
Содержащиеся в ней, может быть любое количество группировок фигурных скобок:
{ {} {} {} {} {} {} }{ {} }
и должно приниматься как две строки:
{ {} {} {} {} {} {} } and { {} }
Содержащиеся в любой из этих внутренних групп фигурных скобок могут быть просто бесконечными рекурсивными группировками, такими как:
{{{{ }{{ }}{ }}}}{{ }{ }{ }}
и должны бытьпринимается как две строки:
{{{{ }{{ }}{ }}}} and {{ }{ }{ }}
Я долго думал об этой проблеме сам и не мог найти правильного решения, и в сети нет никаких инструментов, которые я нашел, чтоиметь визуальный способ увидеть эти две подстроки, он всегда просто соответствует всей строке.Я также использовал некоторых создателей регулярных выражений, таких как "http://regex.inginf.units.it/" и дал ему максимальное количество строк и все возможные крайние случаи, и т. Д., Но получил точность примерно на 40%. Я надеюсь, что кто-то умнее меня по этому вопросуэто может придумать регулярное выражение, чтобы соответствовать ответам на нижних 7 примерах и любой другой возможной строке, построенной из правил выше.
Я сделал простой HTML, чтобы проверить мои строки (просто отредактируйте переменную "reg"в теге сценария, чтобы изменить регулярное выражение и просмотреть результаты с обновлением страницы:
var reg = /({({.*})*})/g;
var str1 = "{}{}";
var str2 = "{{}{}}{{}}";
var str3 = "{{{{{}{}{}{}}{{}}}}{}}{}";
var str4 = "{{{{{{{{{{{{{{{{{}}{{}}}}}{{}}}}}{{}}}}}{{}}}}}{{}}}}}{{}}";
var str5 = "{{}{{{{{{}{}}}}{{{{}{}}}{}}}}{}{{{}{{}}}}}{{{{{}}{{{{}{}}}}}}{{{{}}{{{{}{}}}}}}}";
var str6 = "{{}{}}{{}{{{}{}}}}";
var str7 = "{{}{}}{{{{{}}{{}}}}{{{}{}}}}";
var s1 = document.getElementById("d1").innerHTML = str1.match(reg);
var s2 = document.getElementById("d2").innerHTML = str2.match(reg);
var s3 = document.getElementById("d3").innerHTML = str3.match(reg);
var s4 = document.getElementById("d4").innerHTML = str4.match(reg);
var s5 = document.getElementById("d5").innerHTML = str5.match(reg);
var s6 = document.getElementById("d6").innerHTML = str6.match(reg);
var s7 = document.getElementById("d7").innerHTML = str7.match(reg);
<p id="d1"></p>
<p id="ans1">{},{}</p>
<p id="d2"></p>
<p id="ans2">{{}{}},{{}}</p>
<p id="d3"></p>
<p id="ans3">{{{{{}{}{}{}}{{}}}}{}},{}</p>
<p id="d4"></p>
<p id="ans4">{{{{{{{{{{{{{{{{{}}{{}}}}}{{}}}}}{{}}}}}{{}}}}}{{}}}}},{{}}</p>
<p id="d5"></p>
<p id="ans5">{{}{{{{{{}{}}}}{{{{}{}}}{}}}}{}{{{}{{}}}}},{{{{{}}{{{{}{}}}}}}{{{{}}{{{{}{}}}}}}}</p>
<p id="d6"></p>
<p id="ans6">{{}{}},{{}{{{}{}}}}</p>
<p id="d7"></p>
<p id="ans7">{{}{}},{{{{{}}{{}}}}{{{}{}}}}</p>