gpt4 book ai didi

javascript - 将多个代码块合并在一起

转载 作者:行者123 更新时间:2023-12-01 02:31:31 24 4
gpt4 key购买 nike

我正在用 JS 编程。我想使用正则表达式将多个相同的“代码块”合并到一个代码块中。请注意第二个 block 是另一个不同的 block 。

示例数据

BEFORE ENTRY
Im on the top
block
END

RANDOM NAME
HAHA I MAKE A PROBLEM
END

BEFORE ENTRY
some randon
strings with also 1 numbers 1
END

BEFORE ENTRY
more strings
very cool
END

BEFORE ENTRY
stringi
pizza
END

期望的输出

RANDOM NAME
HAHA I MAKE A PROBLEM
END

BEFORE ENTRY
Im on the top
block

some randon
strings with also 1 numbers 1

more strings
very cool

stringi
pizza
END

(我不在乎随机名称是在顶部还是在底部。)

我失败的尝试

  1. /(?<=BEFORE ENTRY[^]*?)END[^]*?BEFORE ENTRY/g替换为 "" (如果 BEFORE ENTRY block 是后续的,则有效)

  2. /(BEFORE ENTRY)([^]*?)(END)/g玩弄\1 , \2, \3 。如果我能以某种方式合并捕获组就会起作用。

编辑@Archer评论:数据类型是output:内的多行字符串.

arr = [{id:"1", output:">>EXAMPLE DATA<<"},...,{id:"n", output:">>Some similar Data<<"}]

最佳答案

编辑:抱歉,我没有看到 perl 标签..我可以删除答案吗?逻辑仍然可以重用..

如果您想使用正则表达式,我会使用第二个更简单的正则表达式,并捕获组。此外,我使用一组键使解决方案变得通用。

请注意,使用replace函数,除了能够控制仅在第一个匹配项中插入结果之外,还可以禁用特殊替换,例如$$ 可能会出现在结果中。

您不必将结果存储在数组中,您可以使用本地变量作为结果。

var codeInput = `BEFORE ENTRY
Im on the top
block
END

RANDOM NAME
HAHA I MAKE A PROBLEM
END

BEFORE ENTRY
some randon
strings with also 1 numbers 1
END

BEFORE ENTRY
more strings
very cool
END

BEFORE ENTRY
stringi
pizza
END`,
ending = 'END',
keys = ['BEFORE ENTRY', 'RANDOM NAME'],
i, len = keys.length, reg, match, results = {}, inserted;

for(i = 0; i < len; i++){
//getting all the contents
reg = new RegExp(keys[i] + '([^]*?)' + ending, 'g');
while(match = reg.exec(codeInput)){
if(!results[keys[i]]){
results[keys[i]] = keys[i];
}
results[keys[i]] += match[1];
}
//inserting the result: replace the first one by result, remove others
if(results[keys[i]]){
results[keys[i]] += ending + '\n';
inserted = false;
codeInput = codeInput.replace(reg , function(){
if(!inserted){
inserted = true;
return results[keys[i]];
}
return '';
});
}
}

document.getElementById('result').innerHTML = codeInput;
<pre id="result"><pre>

关于javascript - 将多个代码块合并在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48279125/

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