У меня есть файл javascript [file.js
], содержащий группу функций.Код выглядит примерно так:
/**
* Description 1
* @param arg_1 {String}
* @marked
* @return {String}
*/
function func_1(arg_1)
{
var test_var = arg_1.replace(/(?=[\\^$*+?.\(\)|{\}[\]])/g, "\\");
return test_var;
}
/**
* Description 2
* @param arg_1 {String}
* @notmarked
* @return {String}
*/
function func_2(arg_1)
{
var test_var = arg_1.replace(/(?=[\\^$*+?.\(\)|{\}[\]])/g, "\\");
return test_var;
}
/**
* Description 3
* @param arg_1 {String}
* @marked
* @return {String}
*/
function func_3(arg_1)
{
var test_var = arg_1.replace(/(?=[\\^$*+?.\(\)|{\}[\]])/g, "\\");
return test_var;
}
Обратите внимание на теги JSDoc @marked
и @notmarked
.
Задача, которую мне нужно выполнить, - добавить комментарии к каждой функции, которая имеет@marked
tag.
Таким образом, кодовый блок, который был таким:
/**
* Description 1
* @param arg_1 {String}
* @marked
* @return {String}
*/
function func_1(arg_1)
{
var test_var = arg_1.replace(/(?=[\\^$*+?.\(\)|{\}[\]])/g, "\\");
return test_var;
}
Получается так:
/**
* Description 1
* @param arg_1 {String}
* @marked
* @return {String}
*/
//start
function func_1(arg_1)
{
var test_var = arg_1.replace(/(?=[\\^$*+?.\(\)|{\}[\]])/g, "\\");
return test_var;
}
//end
Главный камень преткновения подходит к подходящемурегулярное выражение [регулярное выражение], чтобы правильно изолировать функции, чтобы я мог сделать замену регулярного выражения.
я пробовал это регулярное выражение:
@marked[^\^]*?\*\/[^\^]*?(function[^\^]*?\{[\S\s]+?\})
, который получает совпадения двух функций, но этоостановка закрытия полного тела функции, потому что в самом теле есть закрывающая скобка (}).И изменение [\S\s]+?
на [\S\s]+
просто вытягивает все до последней скобки последней функции.
Исправлено ли это регулярное выражение или есть лучший способ выполнить задачу?
РЕДАКТИРОВАТЬ
Ответ @ rv7 решил проблему.Однако, в зависимости от того, как настроена ваша функция, вы можете столкнуться с другими проблемами.
Например, если у вас есть функциональный блок, подобный этому:
/**
* Description 1
* @param arg_1 {String}
* @marked
* @return {String}
*/
function func_1(arg_1)
{
var test_var = arg_1.replace(/(?=[\\^$*+?.\(\)|{\}[\]])/g, "\\");
var close_b = '}';
var sub_func = function(){
};
return test_var;
}
Регулярное выражение в ответе будетне работа.Тем не менее, следующее регулярное выражение будет:
@marked[^\^]*?\*\/[^\^]*?(function[^\^]*?\{[\S\s]+?[^\\\']\} *(?!;))
Итак, лучше настроить в зависимости от ваших настроек.В общем, вы должны стрелять за отдельно стоящую закрывающую скобку, потому что это должно быть решающим для большинства функциональных блоков.