Во-первых, регулярное выражение для вашего комментария может быть уменьшено до:
/\/\*\*(\S|\s)*?\*\//g
, но это может быть лучше, если вы ищете более одного:
/\/\*\*(?:(\S|\s)(?!\*\/))*?(\S|\s)\*\//g
SecondВозможно, вам придется сделать это в двух частях:
Шаг 1: используйте {string}.match()
, чтобы создать массив всех ваших совпавших функций.
Шаг 2: Используйте {string}.split()
, чтобы удалить всесовпали функции, оставляя остальной код. Затем вы также можете использовать .map()
, чтобы разбить его.
Примерно так:
var functions = code.match(funcRegex);
var restOfCode = code.split(funcRegex).map(c=>c.match(/\/\*\*(?:(\S|\s)(?!\*\/))*?(\S|\s)\*\//g));
Примечание. Каждый элемент restOfCode
будет массивом найденных комментариев, апоследний должен быть перед самой функцией. Например, для тела функции functions[0]
вы должны проверить, начинается ли последний элемент в массиве restOfCode[0][restOfCode[0].length-1]
и заканчивается ли он символами «/ **» и «* /».
Предупреждение: большинство регулярных выражений не могут быть защищеныв некоторых случаях, например, таких или аналогичных:
var b=`
function(){ }
`;
Регулярное выражение не будет надежным для того, что вы хотите сделать, но может помочь разбить код на части для правильного разбора. Для простых случаев, хотя это может быть хорошо.
Кстати: вы просили «присоединиться к ним обоим», но явно не дали ОБА регулярных выражений здесь в своем вопросе. Да, я знаю ссылку, так как они уже объединены, но она должна быть понятна в вашем вопросе.
Так как разбор функциональных тел с помощью регулярного выражения - это, так сказать, дурацкое поручение, вот тот, который по крайней мере соответствует комментариямс началом того, что кажется началом функции:
/^(\/\*\*(?:(?:\S|\s)(?!\*\/))*?(?:\S|\s)?\*\/\s*)?((?:(?:const|var|let).*{.*})?[^}\n]*(?:\(.*\).*{))/gm
https://regex101.com/r/WGqfm8/15
Группа 1 возвращает комментарий к документу, если он существует, а группа 2 - начало строки функции.