const regex = /\b(class|struct)\s+([A-Za-z_]\w*)\s*(:?\s*(public|private|protected)?\s+([A-Za-z_]+))?\s*{(?Us:.*)}\s*;/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('\\b(class|struct)\\s+([A-Za-z_]\\w*)\\s*(:?\\s*(public|private|protected)?\\s+([A-Za-z_]+))?\\s*{(?Us:.*)}\\s*;', 'gm')
const str = `.*(class|struct)\\s+([^{]+)\\s*[:]?([^{]+){
\\b(class|struct)\\s+[A-Za-z_]\\s*\\{
#ifndef STUDENTMODEL_H
#define STUDENTMODEL_H
#include <QAbstractTableModel>v
#include <QList>
class
S : private _jgkdfjgkdlf {};
struct Student {
public:
int id;
QString fio;
QString group;
QString shifr;
double average;
};
class StudentModel
: public QAbstractTableModel
{
Q_OBJECT
public:
explicit StudentModel(QObject* parent = nullptr);
Qt::ItemFlags flags(const QModelIndex& index) const override;
// basic functionality
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
int columnCount(const QModelIndex& parent = QModelIndex()) const override;
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
// editable model
bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override;
bool insertRows(int position, int rows, const QModelIndex& parent = QModelIndex()) override;
bool removeRows(int position, int rows, const QModelIndex& parent = QModelIndex()) override;
void resetData(const QList<Student>& newData);
void readFile(const QString& path);
void writeFile(const QString& path);
private:
QList<Student> _studentData;
};
#endif // STUDENTMODEL_H
`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions