是否有可能使正则表达式接受任何子串

时间:2018-10-25 17:49:34

标签: javascript java regex parsing

我对regex有点陌生。我了解大多数基本知识,但我想做的事超出了我的了解,甚至可能无法实现。

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

class Button : public QObject , public QGraphicsRectItem { Q_OBJECT public: Button(QString name, QGraphicsItem * parent = NULL); void mousePressEvent(QGraphicsSceneMouseEvent * event); signals: void clicked(); private: QGraphicsTextItem * text; QPushButton * button; QGraphicsRectItem * rect; };

名称可以是任何标准的Java函数名称。我知道该怎么做。虽然参数可以是不同数量的参数(目前只有0-2)

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

示例:

Name.Name(Params).Name(Params)

Func.Foo().Bar()

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

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

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

1 个答案:

答案 0 :(得分:1)

标题中问题的简短答案是,您可以构建与任何子字符串匹配的正则表达式。但不幸的是,这不是您想要的。如果您允许任意子字符串,则您的正则表达式将匹配许多您不希望匹配的情况,否则将变得极其复杂(有关示例,请参阅电子邮件正则表达式)。

您想要的是令牌生成器!(https://medium.freecodecamp.org/how-to-build-a-math-expression-tokenizer-using-javascript-3638d4e5fbe9

编辑:对于注释中的解决方案:ast解析器适用于Java,作者希望使用javascript。