JavaScript regex многострочный флаг не работает

Выполнение

sudo sh -c "echo >> somefile"

должно работать. Проблема состоит в том, что> и>> обрабатываются Вашей оболочкой, не командой "sudoed", таким образом, полномочия являются Вашими, не те пользователя Вы - "sudoing" в.

258
задан Peter Mortensen 31 July 2019 в 06:21
поделиться

2 ответа

Вы ищете /.../s модификатор, также известен как модификатор dotall . Он заставляет точку . также для сопоставления символов новой строки, что не выполняет по умолчанию.

Плохая новость в том, что он не существует в JavaScript (он существует с ES2018, см. ниже) . Хорошая новость заключается в том, что вы можете обойти это, используя класс символов (например, \ s ) и его отрицание ( \ S ) вместе, например:

[\s\S]

Итак, в вашем если регулярное выражение будет выглядеть так:

/<div class="box-content-5">[\s\S]*<h1>([^<]+?)<\/h1>/i

Начиная с ES2018, JavaScript поддерживает флаг s (dotAll), поэтому в современной среде ваше регулярное выражение может быть таким, как вы его написали, но с s флаг в конце (вместо m ; m изменяет способ работы ^ и $ , а не ). ):

/<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/is
595
ответ дан 23 November 2019 в 02:39
поделиться

Вам нужен модификатор s (dotall), который явно не существует в Javascript - вы можете заменить . с [\ s \ S], как предлагает @molf. Модификатор m (многострочный) заставляет совпадать строки ^ и $, а не всю строку.

20
ответ дан 23 November 2019 в 02:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: