Как обозначается абсолютно любой символ в RegExp?
Мне нужно получить строку данные между ```:
Как пример из строки
```
Я пожилой
Дракон
```
мне нужно получить "Я пожилой\nДракон".
Для этой задачи я использую RegExp. Как в них обозначить абсолютно любой символ, даже с \n?
Ответы (3 шт):
const str = `Я пожилой\\n\Дракон`;
const text = `Я пожилой Дракон`.split(' Дракон').join('\\n\Дракон');
В javaScript если нет переноса визуально, то он есть не визуально. Пример -
const test = `Тут
Есть
перенос
строки`.split('\n')
console.log(test);
Если вы используете регулярное выражение в среде, поддерживающей стандарт ECMAScript 2018+, вы можете использовать . для поиска любого символа вместе с флагом s.
const text = '```\nЯ пожилой\nДракон\n```';
const regex = /```(.*?)```/gs;
console.log( Array.from(text.matchAll(regex), (x) => x[1].trim()) )
Я использовал String#matchAll и регулярное выражение с захватывающей подмаской, так как левый и правый разделители совпадают (```). Иначе можно было бы использовать выражение с блоками просмотра назад/вперёд и String#match: text.match(/(?<=```\s*).*?(?=\s*```)/gs) (это не сработает, если в строке больше одного совпадения).
Если нужна поддержка любого стандарта ECMAScript, можно использовать [^]:
var text = '```\nЯ пожилой\nДракон\n```';
var regex = /```([^]*?)```/g;
var arr=[],m;
while(m = regex.exec(text)) {
arr.push(m[1].trim())
}
console.log(arr);
Кроме того, можно использовать [\s\S], [\d\D] или [\w\W] для поиска любого символа. Эти конструкции менее эффективны, однако их можно использовать в тех случаях, когда выражения могут быть использованы не только в среде JavaScript, так как они поддерживаются во всех регулярных выражениях NFA.