我得到了一个包含原始维基百科数据的字符串。它的一部分看起来像这样:
{{други значения||||Втората балканска война|Междусъюзническа война}}
{{Инфокутия военен конфликт
|име=Балканска война
|резултат=победа за [[Балкански съюз|Балканския съюз]], [[Лондонски мирен договор]], независимост на [[Албания]], [[Междусъюзническа война]]
|страна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:不要忘记转义元字符,例如 !
或 -
关于javascript - 多行正则表达式不太匹配所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20924670/