#javascript #re&ex
#javascript #регулярное выражение
Вопрос:
У меня в памяти есть следующая строка, и я хотел бы быстро удалить из нее все события отладки. Регулярное выражение, которое я использую, также захватывает другие события, пока не найдет событие DEBUG. Итак, в этом примере он фиксирует более одного события. В следующем XML-файле выполняется захват от начала до 3-го события. Для этого ввода ниже следует выбрать только третье событие.
Я не пытаюсь анализировать XML здесь. Я просто хочу удалить события отладки (&&t; 95% событий) из огромных данных. Я пытался сделать то же самое с помощью parser, и время ожидания истекло на крошечном SBC. Если у вас есть другие способы решить эту проблему в JavaScript (вне браузера) Я открыт для любых предложений.
ВВОД:
<event type="app"&&t;
<header&&t;
<info&&t;1234</info&&t;
</header&&t;
<body&&t;
<severity type="INFO"&&t;messa&e</severity&&t;
</body&&t;
</event&&t;
<event type="app"&&t;
<header&&t;
<info&&t;1235</info&&t;
</header&&t;
<body&&t;
<severity type="ERROR"&&t;messa&e</severity&&t;
</body&&t;
</event&&t;<event type="app"&&t;
<header&&t;
<info&&t;1236</info&&t;
</header&&t;
<body&&t;
<severity type="DEBUG"&&t;messa&e</severity&&t;
</body&&t;
</event&&t;
<event type="app"&&t;
<header&&t;
<info&&t;1237</info&&t;
</header&&t;
<body&&t;
<severity type="ERROR"&&t;messa&e</severity&&t;
</body&&t;
</event&&t;
регулярное выражение:
<event type="app"(.|n|rn)*?<severity type="DEBUG"(.|n|rn)*?</event&&t;
У меня есть этот пример онлайн по адресу:
https://re&ex101.com/r/JW3DWE/1
Спасибо!
Комментарии:
1. Регулярные выражения плохо подходят для обработки XML. Я предлагаю использовать анализатор XML для этой задачи.
2. @oobu& Я понимаю, что регулярное выражение не очень подходит для XML. Хост, выполняющий эту задачу, не обладает большой мощностью процессора, поэтому я пытаюсь удалить ненужные данные из строки, а затем проанализировать с помощью синтаксического анализатора XML. Эти данные о событиях огромны и содержат множество событий отладки, которые мне не нужны, и обработка этого XML занимает много времени, и время ожидания истекает.
3. Анализаторы XML часто имеют возможности выполнять итерации по XML вместо загрузки всего XML-документа в память. Какой язык программирования вы используете?
4. @oobu& Я использую javascript
5. Это то, чего вы хотите?
Ответ №1:
При работе с HTML / XML вы всегда должны отдавать предпочтение использованию синтаксического анализатора.
Для этого конкретного случая вы можете использовать регулярное выражение следующим образом:
Сопоставление:
<event type="app"&&t;(?:(?!</event&&t;)[sS])*<severity type="DEBUG"&&t;[sS]*?</event&&t;
и заменить ничем.