【发布时间】:2021-11-06 10:17:55
【问题描述】:
我正在尝试创建一个函数来获取类似于code block 的字符串部分的开头和结尾,并返回相应的字符索引。 示例:
abc [ //A0 - start
def [ //B1 - start
ghi [ //C2 - start
jkl
] //D2 - end
] //E1 - end
] //F0 - end
然后 getBlock 函数将接收其中一个字符(“[”或“]”)的字符串和索引,并返回其对应伙伴的索引:
var str = "abc [def [ghi [jkl]]]";
getBlock(str, 4); // returns 20 ("F0" in the example)
getBlock(str, 9); // returns 19 ("E1")
getBlock(str, 14); // returns 18 ("D2")
getBlock(str, 20); // returns 4 ("A0")
getBlock(str, 19); // returns 9 ("B1")
getBlock(str, 18); // returns 14 ("C2")
这是我迄今为止的功能尝试:
function getBlock(str) {
console.log({
"start": Array.from(str.matchAll(/\[/g)).map(m => m.index),
"end": Array.from(str.matchAll(/\]/g)).map(m => m.index)
})
}
getBlock("abc [def [ghi [jkl]]]")
它返回两个数组,其中包含所有开始和结束字符的索引,但我仍然无法弄清楚单独获取其伙伴的逻辑,知道是否可能吗?
【问题讨论】:
-
@HereticMonkey 确实,这似乎是同一个问题,但不幸的是,它似乎在 JavaScript 中没有解决方案,尽管答案暗示了一种算法。我刚刚发布了我找到的 JavaScript 解决方案,可能不是最好的,但它似乎有效。
标签: javascript string text-parsing