gpt4 book ai didi

javascript - 正则表达式从函数组中获取单个函数体

转载 作者:行者123 更新时间:2023-11-29 20:47:42 25 4
gpt4 key购买 nike

我有一个包含一组函数的 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 标记的函数添加注释。

所以一个代码块是这样的:

/**
* 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的回答解决了这个问题。但是,根据函数的设置方式,您可能会遇到更多问题。

例如,如果您有这样一个功能 block :

/**
* 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]+?[^\\\']\} *(?!;))

因此,最好根据您的设置进行调整。总而言之,您应该争取独立的右括号,因为对于大多数功能 block 来说,这应该是决定性的。

最佳答案

您可以在正则表达式中的 \} 之前添加 [^\\] 来完成您的任务,它说:

Find a } which is not preceded by a \, or syntactically which isn't escaped

现在,正则表达式变成:

@marked[^\^]*?\*\/[^\^]*?(function[^\^]*?\{[\S\s]+?[^\\]\})

Live Example


可以进一步简化为:

@marked[\s\S]*?(function[\s\S]*?[^\\]\})

Live Example


编辑:

对于更通用的解决方案,您可以在 \} 之前使用 [;\s]

关于javascript - 正则表达式从函数组中获取单个函数体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53710790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com