gpt4 book ai didi

javascript - 将函数调用与 JS Regex 匹配

转载 作者:行者123 更新时间:2023-11-30 07:14:51 25 4
gpt4 key购买 nike

我正在尝试使用 Regex 匹配函数调用,但没有在大的 JS 文件中给出相同函数的嵌套调用。例如下面是JS文件中的代码

abc('hello', function(){
abc('hello1', function(){
abc('hello2', function() {
// Does some!
});
});
});

而且我只想匹配第一个调用来识别第一个参数。我正在寻找的最终结果是 hello。所以像下面这样匹配第一次调用

.replace(/(?:\r\n|\r|\n)/g, '').match(/abc\s*[^\"\']*\"([^\"\']*)\"/); 

有什么建议吗?

最佳答案

您可以使用 Esprima 等 JS 解析器来执行此操作。在我看来,这将是正确可靠的解决方案,而不是神奇的正则表达式。正则表达式通常难以维护,并且经常在边缘情况下失败。它们在某些情况下非常有用,但这不是其中之一。

要试用 Esprima,请使用此工具:

Esprima Demo

然后输入:

abc('hello', function(){
abc('hello1', function(){
abc('hello2', function() {
/* ... */
});
});
});

abc('hello3', function(){
abc('hello4', function(){
abc('hello5', function() {
/* ... */
});
});
});

然后过滤返回的 JSON 以仅查找第一个“级别”函数及其第一个参数:

JSON.body.filter(function(token) {
return token.type === 'ExpressionStatement' && token.expression.type ===
'CallExpression' && token.expression.callee.name === "abc"
}).map(function(funcToken) {
return funcToken.expression.arguments[0].value
})

返回,在这个例子中:

["hello", "hello3"]

关于javascript - 将函数调用与 JS Regex 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28167107/

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