gpt4 book ai didi

javascript - 多行正则表达式不太匹配所有内容

转载 作者:行者123 更新时间:2023-11-30 17:41:49 26 4
gpt4 key购买 nike

我得到了一个包含原始维基百科数据的字符串。它的一部分看起来像这样:

{{други значения||||Втората балканска война|Междусъюзническа война}}
{{Инфокутия военен конфликт
|име=Балканска война
|резултат=победа за [[Балкански съюз|Балканския съюз]], [[Лондонски мирен договор]], независимост на [[Албания]], [[Междусъюзническа война]]
|страна1=Балкански съюз:<br />• [[Картинка:Flag of Bulgaria.svg|20px|border]] [[България]]<br />• [[Картинка:Flag_of_Greece_(1822-1978).svg|20px|border]] [[Гърция]]<br />• [[Картинка:Flag of the Kingdom of Montenegro.svg|20px|border]] [[Черна гора]] <br /> • [[Картинка:State Flag of Serbia (1882-1918).svg|20px|border]] [[Сърбия]]
|страна2= [[Картинка:Ottoman Flag.svg|20px]] [[Османска империя]]<br/>
|командир1= [[Картинка:Flag of Bulgaria.svg|20px|border]] [[Фердинанд I]]<br />[[Картинка:Flag of Bulgaria.svg|20px|border]] [[Михаил Савов]]<br />[[Картинка:Flag_of_Greece_(1822-1978).svg|20px|border]] [[Константинос I]]<br /> [[Картинка:Flag of the Kingdom of Montenegro.svg|20px|border]] [[Никола I]]<br />[[Картинка:State Flag of Serbia (1882-1918).svg|20px|border]] [[Радомир Путник]]
|командир2= [[Картинка:Ottoman Flag.svg|20px]] [[Назим паша]]<br /> [[Картинка:Ottoman Flag.svg|20px]] [[Абдулах паша]]<br /> [[Картинка:Ottoman Flag.svg|20px]] [[Зеки паша]]<br /> [[Картинка:Ottoman Flag.svg|20px]] [[Али Ръза паша]]
|сила1=
[[Картинка:Flag of Bulgaria.svg|20px|border]] България - 366 000<br />[[Картинка:State Flag of Serbia (1882-1918).svg|20px|border]] Сърбия - 190 000<br />[[Картинка:Flag_of_Greece_(1822-1978).svg|20px|border]] Гърция - 120 000<br /> [[Картинка:Flag of the Kingdom of Montenegro.svg|20px|border]] Черна гора - 36 000
|сила2=570 000 (максимален брой)
|жертви1=
|жертви2=
}}

More text

请注意整个内容几乎都被 {{ 和 }} 包围了。

问题:

输出应该是这样的

More Text

此刻的样子

[[Картинка:Flag of Bulgaria.svg|20px|border]] България - 366 000[[Картинка:State
Flag of Serbia (1882-1918).svg|20px|border]] Сърбия - 190 000[[Картинка:Flag_of
_Greece_(1822-1978).svg|20px|border]] Гърция - 120 000 [[Картинка:Flag of the Ki
ngdom of Montenegro.svg|20px|border]] Черна гора - 36 000



}}

More Text

代码

 .replace(/^(\*|\||\{).*|\{\{.*?\}\}|<(.|\n)*?>|<!--[\s\S]*?-->/gm, "") // smth

应该删除所有以 *、|、{ 或 * 开头的行,删除 {{ }} 中的内容,删除标签,删除 html 注释。我哪里错了?

最佳答案

嗯,这对我来说效果很好:

我做了两步替换。

首先,您将所有内容替换为 {{}} :

replace(/\{\{[^\{\}]*\}\}/gm, "")

然后您再次替换出现的(用您的话说)lines starting with *, |, { or *, remove tags, remove html在字符串的其余部分:

replace(/(\*|\||\{).*|\<(.|\n)*?\>|\<\!\-\-[\s\S]*?\-\-\>/gm, "")

代码:

var html = "{{други значения||||Втората балканска война|Междусъюзническа война}}\n{{Инфокутия военен конфликт\n|име=Балканска война\n|резултат=победа за [[Балкански съюз|Балканския съюз]], [[Лондонски мирен договор]], независимост на [[Албания]], [[Междусъюзническа война]]\n|страна1=Балкански съюз:<br />• [[Картинка:Flag of Bulgaria.svg|20px|border]] [[България]]<br />• [[Картинка:Flag_of_Greece_(1822-1978).svg|20px|border]] [[Гърция]]<br />•  [[Картинка:Flag of the Kingdom of Montenegro.svg|20px|border]] [[Черна гора]] <br /> • [[Картинка:State Flag of Serbia (1882-1918).svg|20px|border]] [[Сърбия]]\n|страна2= [[Картинка:Ottoman Flag.svg|20px]] [[Османска империя]]<br/>\n|командир1= [[Картинка:Flag of Bulgaria.svg|20px|border]] [[Фердинанд I]]<br />[[Картинка:Flag of Bulgaria.svg|20px|border]] [[Михаил Савов]]<br />[[Картинка:Flag_of_Greece_(1822-1978).svg|20px|border]] [[Константинос I]]<br /> [[Картинка:Flag of the Kingdom of Montenegro.svg|20px|border]] [[Никола I]]<br />[[Картинка:State Flag of Serbia (1882-1918).svg|20px|border]] [[Радомир Путник]]\n|командир2= [[Картинка:Ottoman Flag.svg|20px]] [[Назим паша]]<br /> [[Картинка:Ottoman Flag.svg|20px]] [[Абдулах паша]]<br /> [[Картинка:Ottoman Flag.svg|20px]] [[Зеки паша]]<br /> [[Картинка:Ottoman Flag.svg|20px]] [[Али Ръза паша]]\n|сила1=\n[[Картинка:Flag of Bulgaria.svg|20px|border]] България - 366 000<br />[[Картинка:State Flag of Serbia (1882-1918).svg|20px|border]] Сърбия - 190 000<br />[[Картинка:Flag_of_Greece_(1822-1978).svg|20px|border]] Гърция - 120 000<br /> [[Картинка:Flag of the Kingdom of Montenegro.svg|20px|border]] Черна гора - 36 000\n|сила2=570 000 (максимален брой)\n|жертви1=\n|жертви2=\n}}{{други значения||||Втората балканска война|Междусъюзническа война}}\n{{Инфокутия военен конфликт\n|име=Балканска война\n|резултат=победа за [[Балкански съюз|Балканския съюз]], [[Лондонски мирен договор]], независимост на [[Албания]], [[Междусъюзническа война]]\n|страна1=Балкански съюз:<br />• [[Картинка:Flag of Bulgaria.svg|20px|border]] [[България]]<br />• [[Картинка:Flag_of_Greece_(1822-1978).svg|20px|border]] [[Гърция]]<br />•  [[Картинка:Flag of the Kingdom of Montenegro.svg|20px|border]] [[Черна гора]] <br /> • [[Картинка:State Flag of Serbia (1882-1918).svg|20px|border]] [[Сърбия]]\n|страна2= [[Картинка:Ottoman Flag.svg|20px]] [[Османска империя]]<br/>\n|командир1= [[Картинка:Flag of Bulgaria.svg|20px|border]] [[Фердинанд I]]<br />[[Картинка:Flag of Bulgaria.svg|20px|border]] [[Михаил Савов]]<br />[[Картинка:Flag_of_Greece_(1822-1978).svg|20px|border]] [[Константинос I]]<br /> [[Картинка:Flag of the Kingdom of Montenegro.svg|20px|border]] [[Никола I]]<br />[[Картинка:State Flag of Serbia (1882-1918).svg|20px|border]] [[Радомир Путник]]\n|командир2= [[Картинка:Ottoman Flag.svg|20px]] [[Назим паша]]<br /> [[Картинка:Ottoman Flag.svg|20px]] [[Абдулах паша]]<br /> [[Картинка:Ottoman Flag.svg|20px]] [[Зеки паша]]<br /> [[Картинка:Ottoman Flag.svg|20px]] [[Али Ръза паша]]\n|сила1=\n[[Картинка:Flag of Bulgaria.svg|20px|border]] България - 366 000<br />[[Картинка:State Flag of Serbia (1882-1918).svg|20px|border]] Сърбия - 190 000<br />[[Картинка:Flag_of_Greece_(1822-1978).svg|20px|border]] Гърция - 120 000<br /> [[Картинка:Flag of the Kingdom of Montenegro.svg|20px|border]] Черна гора - 36 000\n|сила2=570 000 (максимален брой)\n|жертви1=\n|жертви2=\n}}\n\nMore text";

var re1 = /\{\{[^\{\}]*\}\}/gm;
var re2 = /(?:\*|\||\{).*|<(.|\n)*?>|<!--[\s\S]*?-->/gm;

html = html.replace(re1, "").replace(re2, "");

编辑:

好的,刚刚意识到您的正则表达式出了什么问题。你需要下订单。首先你必须替换{{里面的内容和 }} , 因为里面有线 {{这不会在其他条件下通过...因此将出现在最终的 html 中。

那么我们的最终表达式将是:\{\{[^\{\}]*\}\}|(?:\*|\||\{).*|\<(.|\n)*?\>|\<\!\-\-[\s\S]*?\-\-\>

ps:不要忘记转义元字符,例如 !-

参见 wrong regex101 examplecorrect regex101 example

关于javascript - 多行正则表达式不太匹配所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20924670/

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