public static string FindStringBetweenMatchingBrace(string s, int start, char startBrace, char endBrace)
{
var braces = new char[] { startBrace, endBrace };
var pos = start;
var end = start;
var level = 0;
var notStarted = true;
while (true)
{
var index = s.IndexOfAny(braces, pos);
if (index < 0) break;
if (notStarted)
{
notStarted = false;
start = index + 1;
}
if (s[index] == startBrace) level++;
if (s[index] == endBrace) level--;
if (level <= 0)
{
end = index;
break;
}
pos = index + 1;
}
return s.Substring(start, end - start);
}function indexOfAny(str, anyOf, startIndex) {
if (!str) return -1;
if (!anyOf) return -1;
let minIndex = -1;
for (let j = 0; j < anyOf.length; j++) {
let index = str.indexOf(anyOf[j], startIndex);
if (index >= 0 && (minIndex === -1 || index < minIndex)) {
minIndex = index;
}
}
return minIndex;
};
function findStringBetweenMatchingBrace(s, start, startBrace, endBrace) {
const braces = [startBrace, endBrace];
let pos = start;
let end = start;
let level = 0;
let notStarted = true;
while (true) {
var index = indexOfAny(s, braces, pos);
if (index < 0) break;
if (notStarted) {
notStarted = false;
start = index + 1;
}
if (s[index] == startBrace) level++;
if (s[index] == endBrace) level--;
if (level <= 0) {
end = index;
break;
}
pos = index + 1;
}
return s.substring(start, end);
}
const result = findStringBetweenMatchingBrace("abc (def efg (abf ddd) t)est", 0, "(", ")");
console.log(result);
const result2 = findStringBetweenMatchingBrace(result, 0, "(", ")");
console.log(result2);
502300cookie-checkC# Find String between matching brace