const regex = /\B@\w+\('[\w+\s]+',\s+
(?(?='(?=(\w+\)|\w+\()))
'[\w\)\(]+'
|('\w+'|\$\w+)
)\)/g;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('\\B@\\w+\\(\'[\\w+\\s]+\',\\s+
(?(?=\'(?=(\\w+\\)|\\w+\\()))
\'[\\w\\)\\(]+\'
|(\'\\w+\'|\\$\\w+)
)\\)', 'g')
const str = `@extends('template', 'te)st')
@extends('template', 'te())st')
@extends('template', 'te()st')
@extends('template', 'test')
@extends('template', 'te(st')
@extends('template', \$test)
@extends('template', test)
@extends('template', 'test)`;
// 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