Например, для кода с большим количеством фрагментов, подобных этому:

<section>
    <p><b>test</b></p>
</section>

Я хочу иметь возможность искать:

<section>
    <p><b>

Так что я могу заменить его

<section>
    <h2>

Но не заменяйте другие <p><b> , у которых нет тега раздела непосредственно перед ним.

Поэтому я не могу искать <p><b> но NetBeans не позволяет мне вставлять выделенные элементы с пробелами. Итак, я предполагаю, что мне нужно сделать регулярное выражение для поиска чего-то вроде:

<section>(any-white-space)<p><b>

Но я не совсем уверен, как это сделать. Любая помощь будет оценена.

1 ответ1

1

Я протестировал это в jEdit (который также написан на Java, как NetBeans, но у меня нет доступа к NetBeans в настоящее время). Попробуйте это для шаблона регулярных выражений:

(?<=<section>)(\s*)<p><b>([^<]+)</b></p>

с этим используется в качестве замены:

$1<h2>$2</h2>

Шаблон регулярного выражения говорит «соответствует последовательности, которой предшествует <section> и которая начинается с любого количества пробелов (которое сохраняется как группа захвата 1), а затем содержит <p><b> за которым следует по крайней мере один символ, который не является < (и сохраните эти символы как группу захвата 2) и заканчивается на </b></p> ".

Шаблон замены просто говорит «начните с пробела из группы захвата 1, затем выведите <h2> затем символы из группы захвата 2, которые были найдены внутри элемента <b> , затем выведите </h2> ». Захват и вывод пробела означает, что ваш новый элемент h2 будет начинаться с тех же новых строк и вкладок, что и элемент p, поэтому любое красивое форматирование не будет разрушено этим изменением.

Просто имейте в виду, что регулярное выражение не может знать, где оно находится относительно структуры DOM, поэтому оно не может знать, правильно ли использовать h1, h2, h3, h4 и так далее. Но если вам когда-нибудь понадобится <h2> тогда попробуйте.

(На самом деле, если вы используете HTML5, тогда вы можете начинать каждый новый элемент раздела с элемента <h1> или с любого другого начального номера на самом деле, и для автоматической обработки уровней заголовка требуется совместимый браузер.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .