2014-01-04 6 views
1

У меня есть строка с необработанными данными из Википедии. Часть его выглядит так:Многострочное регулярное выражение не совсем соответствует всем

{{други значения||||Втората балканска война|Междусъюзническа война}} 
{{Инфокутия военен конфликт 
|име=Балканска война 
|резултат=победа за [[Балкански съюз|Балканския съюз]], [[Лондонски мирен договор]], независимост на [[Албания]], [[Междусъюзническа война]] 
|страна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-комментарии. Где я ошибаюсь?

ответ

2

Ну, это работает хорошо для меня:

Я сделал замену двух шагов.

Во-первых, вы замените все в {{ и }}:

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]*?\-\-\>

пс: Не забывайте экранировать метасимволы тоже, как ! или -

См wrong regex101 example и correct regex101 example

+0

Yeh, что проработаны , Странно, я попробовал это, прежде чем задал вопрос, и он не работал. Благодарю. – Deepsy

Смежные вопросы