gpt4 book ai didi

java - Regex - 在文本中查找 javascript 方法及其变量

转载 作者:行者123 更新时间:2023-12-01 15:46:46 24 4
gpt4 key购买 nike

到目前为止我提出的最佳解决方案,给定一个文本 block ,它会找到那些具有参数的方法,而且还会找到具有参数键的函数,如下所示:“get:function(key)”。

    public class JavaScriptMethodFinder
{
static readonly string pattern = @"(?<=\s(?<Begin>[a-zA-Z_][a-zA-Z0-9_]*?)\(|\G)\s*((['""]).+?(?<!\\)\2|\{[^}]+\}|[^,;'""(){}\)]+)\s*(?:,|(?<IsEnd>\)))";
private static readonly Regex RegEx = new Regex(pattern, RegexOptions.Compiled);

public IEnumerable<dynamic> Find(string text)
{
var t = RegEx.Matches(text);
dynamic current = null;
bool isBegin;
foreach (Match item in t)
{

if (isBegin = (item.Groups["Begin"].Value != string.Empty))
{
current = new ExpandoObject();
current.MethodName = item.Groups["Begin"].Value;
current.Parameters = new List<string>();
current.Parameters.Add(item.Groups[1].Value);
}else
current.Parameters.Add(item.Groups[1].Value);
if (item.Groups["IsEnd"].Value != string.Empty)
{
isBegin = false;
if(!(item.Groups["Begin"].Value != string.Empty))
current.Parameters.Add(item.Groups[1].Value);
yield return current;
}

}

}

}

我想找到方法及其变量。举两个例子。

第一个示例

function loadMarkers(markers)
{
markers.push(
new Marker(
"Hdsf",
40.261330438503,
10.4877055287361,
"some text"
)
);
}

第二个示例

var block = new AnotherMethod('literal', 'literal', {"key":0,"key":14962,"key":false,"key":2});

到目前为止,我已经在这里进行了测试:http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

(?<=Marker\(|\G)\s*((?<name>['""]).+?(?<!\\)\2|\{[^}]+\}|[^,;'""(){}\)]+)\s*(?:,|\))

找到 5 个匹配项: “Hdsf”,有 2 组:“HDSF”” 40.261330438503,有2组:40.261330438503 10.4877055287361,有2组:10.4877055287361 “一些文本”)有 2 组:“一些文字”” )有 2 组:

(?<=AnotherMethod\(|\G)\s*((?<name>['""]).+?(?<!\\)\2|\{[^}]+\}|[^,;'""(){}\)]+)\s*(?:,|\))

找到 3 个匹配项:'literal',有 2 组:'文字'' (姓名) 'literal',有 2 组:'文字'' (姓名) {"key":0,"key":14962,"key":false,"key":2}) 有 2 组:{“键”:0,“键”:14962,“键”:假,“键”:2} (姓名)

我想将它组合起来,这样我就有一个表达式

  • 匹配<(方法名称)>
    • 组:参数
    • 组:参数
    • 组:参数
  • 匹配<(方法名称)>
    • 组:参数
    • 组:参数
    • 组:参数

所以当我扫描包含这两种情况的页面时,我会得到两个匹配的女巫例如,第一个捕获是方法名称,然后是参数。

我一直在尝试修改我已有的内容,但它与 LookBehind 的内容太复杂,我无法理解它。

最佳答案

对于此类项目,正则表达式是一种非常有问题的方法。您是否考虑过使用真正的 JavaScript 解析器/编译器,例如 Rhino ?这将使您“免费”充分了解 JavaScript 语法,并能够有意义地浏览源代码。

关于java - Regex - 在文本中查找 javascript 方法及其变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6920020/

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