У меня есть markdown
как markdown
ниже:
# Heading!
* unorder list!
1. ordered list
*no it not list
2.just normal text
'''
block
code
python
'''
#goodbye
И я хочу, чтобы regex разделил его на 3 part
, первый и последний - обычный текст, второй - кодовый блок
Как это (некоторые новые строки удаляются с помощью stackoverflow):
Первый:
# Heading!
* unorder list!
1. ordered list
*no it not list
2.just normal text
Блок кода:
'''
block
code
python
'''
Прошлой:
#goodbye
я использовал
/^'''(.|\n)+'''$|^(.|\n)+(?!')$/gm
в javascript
но не работает. Не удается получить блок кода.
У кого-нибудь есть идеи?
Вы можете использовать регулярное выражение для соответствия трем backticks в начале строки, а затем любые символы, как можно меньше, до первой строки, которая начинается с 3 обратных ссылок, и обертывания всего шаблона группой захвата для использования в split
поэтому что согласованная часть также попала в результирующий массив:
s.split(/^('{3}[^]*?^'{3})/m)
Шаблон соответствует:
^
- начало строки'{3}
- 3 backticks[^]*?
- любые 0+ символы, как можно меньше^
- начало строки'{3}
- 3 обратных цикла.JS demo:
const regex = /^('{3}[^]*?^'{3})/m;
const str = '# Heading!
* unorder list!
1. ordered list
*no it not list
2.just normal text
\'\'\'
block
code
python
\'\'\'
#goodbye';
console.log(str.split(regex));
Почему бы не разделиться на ""?
var str = '# Heading!
* unorder list!
1. ordered list
*no it not list
2.just normal text
\'\'\'
block
code
python
\'\'\'
#goodbye';
out = str.split(''''');
console.log(out);
С помощью опции 'm' ваше регулярное выражение выполняется по строкам. Вам нужно будет протестировать один квест и управлять разрывами строк.
Например: (?:\s|\S)([\s\S]+.*)
s.split(/^(`{3}[^]*?^`{3})/m)