const regex = /(([(|\[](?P<series>[^)\]]*)[)|\]]))?((?P<author>.*[^\s][^\-])[\s]+-[\s]*)?(?P<title>[^(]*)([(|\[](?:[\s]*(?P<published>(([12][\d]{3,3})(?:(?!([^.\)\-a-zA-Z_]*(-+[^.\)a-zA-Z_]+)+)))))?)?[\s]*([,]?[\s]*(?P<publisher>[\s\w\s]*)[\s]*)?([,]?[\s]*(isbn:|isbn[-]?13:)?(?P<isbn>[0-9-]+))?[)|\]])?/gim;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(([(|\\[](?P<series>[^)\\]]*)[)|\\]]))?((?P<author>.*[^\\s][^\\-])[\\s]+-[\\s]*)?(?P<title>[^(]*)([(|\\[](?:[\\s]*(?P<published>(([12][\\d]{3,3})(?:(?!([^.\\)\\-a-zA-Z_]*(-+[^.\\)a-zA-Z_]+)+)))))?)?[\\s]*([,]?[\\s]*(?P<publisher>[\\s\\w\\s]*)[\\s]*)?([,]?[\\s]*(isbn:|isbn[-]?13:)?(?P<isbn>[0-9-]+))?[)|\\]])?', 'gim')
const str = `(1958, Open Road d34234234, 978-1-4532-1730-6).epub
(1958, Open Ro234ad , 9781-4532-o1730-6).epub
(1958, Open Rosd234ad ).epub
( 1958 ).epub
(1958).epub
( Open Road ).epub
(Open road , 9234-1-4532-17300-9-6).epub
(1234, 9234-1-4532-17300-9-6).epub
(91886).epub
(9186).epub
(1186).epub
title (1958, Open Road34234234, 978-1-4532-1730-6).epub
(asdf) author, a2 - title ioiuoi-uyoiu (1958, Open Ro234ad , 9781-4532-1730-6).epub
author, adf - title ioiuoi-uyoiu (1958, Open Rosd234ad ).epub
author, adf - title ioiuoi-uyoiu ( 1958 ).epub
author, adf - title ioiuoi-uyoiu (1958).epub
author, adf - title ioiuoi-uyoiu ( Open Road ).epub
(dddfasdfasdf) author666, a66df - title ioiuoi-uyoiu (Open road , 9234-1-4532-17300-9-6).epub
author, adf - title ioiuoi-uyoiu (1234, 9234-1-4532-17300-9-6).epub
author, adf - title ioiuoi-uyoiu (1234, 923416).epub
author, adf - title ioiuoi-uyoiu ( 91886-8).epub
author, adf - title ioiuoi-uyoiu ( 9186 ).epub
author, adf - title ioiuoi-uyoiu ( 1186 ).epub
(dddfasdfasdf) author666, a66df - title ioiuoi-uyoiu ( Open road , isbn:9234-1-4532-17300-9-6).epub
(dddfasdfasdf) author666, a66df - title ioiuoi-uyoiu ( Open road , isbn13:9234-1-4532-17300-9-6).epub
(dddfasdfasdf) author666, a66df - title ioiuoi-uyoiu ( Open road , isbn-13:9234-1-4532-17300-9-6).epub
(dddfasdfasdf) author666, a66df - title ioiuoi-uyoiu ( Open road , 9234-1-4532-17300-9-6).epub`;
// 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