Как определить уровень заголовка с помощью регулярных выражений (Javascript) - PullRequest
0 голосов
/ 28 июня 2018

Я использую Node.js для чтения файла уценки для заказов на рабочие места, которые мы получаем от клиентов. Я разделяю файлы на массивы строк и выполняю проверку каждой строки, чтобы увидеть, что это такое (h1, h3, задача и т. Д.), Но у меня много проблем с тем, чтобы мои RegExps работали правильно. Вот код, который у меня есть:

var filesystem = require('fs');
let content;
let missingItems = [];

filesystem.readFile('orders.md', 'utf8', (err, res) => {
    let content = res;
    let lines = content.split('\n');
    lines.forEach(line => {
        if(line.match(/#{1}/)){
            console.log('Store Name: ', line);
        };
    });
});

Этот код, однако, возвращает все строки h1 и h3. При использовании RegExp 101 в режиме онлайн я обнаружил, что проблема в том, что мой RegExp сопоставляется 3 раза для линий h3 и один раз для линий h1.

Как мне написать регулярное выражение, которое не будет возвращать true для строк h1 и h3? Я не понимаю, почему это соответствует 3 раза, когда я явно говорю, что соответствие {1} (ONCE)

Это область тестирования, с которой я тестировал свои выражения, и пример текста, с которым я пытаюсь протестировать: RegExp101

1 Ответ

0 голосов
/ 28 июня 2018

Вы спрашиваете, содержит ли строка (хотя бы) один # с этим регулярным выражением, как это делают обе строки. Вы можете использовать отрицательный взгляд:

^#(?!#)

^ означает «начало строки», затем буквальный символ фунта, затем отрицательный прогноз, который принимает форму (?!pattern), поэтому мы смотрим в будущее, чтобы НЕ увидеть другой символ фунта.

Гораздо проще было бы проверить начальный # и следующий пробел \s:

^#\s

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...