const regex = /^\s*?((?:virtual\s+|const\s+|friend\s+|volatile){0,3}\s*(?:\w+\s*::\s*)?\s*[\w]*?)\s*\w+\s*::\s*(~?[\w]+)\s*(\(.*\))\s*(const)?\s*[{|:]/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('^\\s*?((?:virtual\\s+|const\\s+|friend\\s+|volatile){0,3}\\s*(?:\\w+\\s*::\\s*)?\\s*[\\w]*?)\\s*\\w+\\s*::\\s*(~?[\\w]+)\\s*(\\(.*\\))\\s*(const)?\\s*[{|:]', 'gm')
const str = `#include <iostream>
#include <iomanip>
#include "Time.h"
using namespace std;
Time :: ~Time(const int h, const int m, const int s)
: hour(h), minute (m), second(s)
{}
virtual const std::void Time :: setTime(const int h, const int m, const int s)
{
hour = h;
minute = m;
second = s;
}
std::string Time :: print() const
{
cout << setw(2) << setfill('0') << hour << ":"
<< setw(2) << setfill('0') << minute << ":"
<< setw(2) << setfill('0') << second << "\\n";
}
bool Time :: equals(const Time &otherTime)
{
if(hour == otherTime.hour
&& minute == otherTime.minute
&& second == otherTime.second)
return true;
else
return false;
}`;
// 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