const regex = /^\s*((?:const\s+|virtual\s+|friend\s+|volatile\s+){0,4}\s*?(?:\w+\s*::)?\s*[\w]+)\s+(\w+)\s*\([\s\S]*?\)\s*(const)?\s*{/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('^\\s*((?:const\\s+|virtual\\s+|friend\\s+|volatile\\s+){0,4}\\s*?(?:\\w+\\s*::)?\\s*[\\w]+)\\s+(\\w+)\\s*\\([\\s\\S]*?\\)\\s*(const)?\\s*{', 'gm')
const str = `#include "Port.h"
namespace Port {
uint8_t lirePin(volatile uint8_t * pin)
{
return * pin;
}
/*********************************************************************
* retourne vrai si les pin du port pin sont ouvert
* pin = PINA a PIND
*********************************************************************/
bool lirePin(uint8_t pins, volatile uint8_t * pin)
{
return (*pin & pins);
}
/*********************************************************************
* Met la pin du port port a 5V
* port = PORTA a PORTD
*********************************************************************/
void ouvrirPin(uint8_t pins, volatile uint8_t * port)
{
*port |= pins;
}
/*********************************************************************
* Met la pin du port port a 0V
* port = PORTA a PORTD
*********************************************************************/
void fermerPin(uint8_t pins, volatile uint8_t * port)
{
*port &= ~pins;
}
/*********************************************************************
* Met la pin du port ddr en Entree
* ddr = DDRA a DDRD
*********************************************************************/
void pinEntree(uint8_t pins, volatile uint8_t * ddr)
{
*ddr &= ~pins;
}
/*********************************************************************
* Met la pin du port ddr en Sortie
* ddr = DDRA a DDRD
*********************************************************************/
const volatile friend std::void pinSortie(uint8_t pins,
volatile uint8_t * ddr)
{
*ddr |= pins;
}
/*********************************************************************
* Met le port ddr en Entree
* ddr = DDRA a DDRD
*********************************************************************/
void portEntree(volatile uint8_t * ddr) const
{
*ddr = ENTREE;
}
/*********************************************************************
* Met le port ddr en Entree
* ddr = DDRA a DDRD
*********************************************************************/
void portSortie(volatile uint8_t * ddr)
{
*ddr = SORTIE;
}
}
`;
// 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