首页 > 解决方案 > 是否可以制作一个接受任何子字符串的正则表达式

问题描述

我对正则表达式有点陌生。我了解大部分基础知识,但我正在尝试做的事情超出了我的知识范围,甚至可能是不可能的。

我正在尝试在 JavaScript 中创建一个正则表达式,它可以匹配以下模式中的一系列函数调用。

Name.Name(Params).Name(Params)

名称可以是任何标准的 java 函数名称。我了解如何处理这部分。参数虽然可以是不同数量的参数(目前只有 0-2)

然而,我最大的问题是 params 可能会采用任何带有单引号或双引号或变量名的字符串。我在下面添加了一些示例,因为我需要所有这些来使用我的正则表达式(如果可能)。

例子:

Func.Foo().Bar()

Foo.Bar('foo', bar).Foobar()

Foo.Bar("foo", "bar").bar(')')

Foo.Bar('/"foo/"').bar("foo(bar/")")

我主要关心的是我不能只寻找一个开头和括号甚至两个引号。是否可以使用正则表达式来解析函数调用和参数?

标签: javascriptjavaregexparsing

解决方案


对标题中问题的简短回答是肯定的,您可以构建一个匹配任何子字符串的正则表达式。但不幸的是,这不是你想要的。如果您允许任意子字符串,则您的正则表达式将匹配您不想匹配的许多情况,或者它将变得非常复杂(请参阅电子邮件正则表达式以获取示例)。

你想要的是一个标记器!(https://medium.freecodecamp.org/how-to-build-a-math-expression-tokenizer-using-javascript-3638d4e5fbe9

编辑:对于评论中的解决方案:ast解析器是用于java的,作者想使用javascript。


推荐阅读