我对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(')')
我在这里主要担心的是,我不能只寻找一个开头和一个括号甚至是两个引号。 是否可以使用正则表达式,以便我可以解析出函数调用和参数?
答案 0 :(得分:1)
标题中问题的简短答案是,您可以构建与任何子字符串匹配的正则表达式。但不幸的是,这不是您想要的。如果您允许任意子字符串,则您的正则表达式将匹配许多您不希望匹配的情况,否则将变得极其复杂(有关示例,请参阅电子邮件正则表达式)。
您想要的是令牌生成器!(https://medium.freecodecamp.org/how-to-build-a-math-expression-tokenizer-using-javascript-3638d4e5fbe9)
编辑:对于注释中的解决方案:ast解析器适用于Java,作者希望使用javascript。