Ошибка валидации markdown

Рейтинг: 1Ответов: 2Опубликовано: 23.01.2023

Описание

Есть вот этот код:

function number(min, max) {
    return Math.random() * (max - min) + min;
}

Если посмотреть его markdown как строку будет:

"\`\`\`\nfunction number(min, max) {\n\treturn Math.random() * (max - min) + min;\n}\n\`\`\`"

Ну логично, что код написанный мною валидируется как код, поэтому его структуру можно описать этим regex:

/```.*?```/gm

Но почему-то строка не проходит проверку regex:

const string = "\`\`\`\nfunction number(min, max) {\n\treturn Math.random() * (max - min) + min;\n}\n\`\`\`";
const regex = /```.*?```/gm;
console.log(regex.test(string));

Вопрос

Почему?

Ответы

▲ 2Принят

(Точка, десятичная запятая) сопоставляется с любым символом за исключением символов новой строки: \n, \r, \u2028 или \u2029.

const string = "\`\`\`\nfunction number(min, max) {\n\treturn Math.random() * (max - min) + min;\n}\n\`\`\`";
const regex = /```[\s\S]*?```/gm;
console.log(regex.test(string));

▲ 2

Для захвата метасимволом . перевода строки можно так же добавить модификатор s - single line.

const string = "\`\`\`\nfunction number(min, max) {\n\treturn Math.random() * (max - min) + min;\n}\n\`\`\`";
const regex = /```.*?```/gms;
console.log(regex.test(string));