const regex = new RegExp('(?i)(?=(((\\()?(red|gold|silver|king)( pack)?(\\))?)|((70|83|84|100|120)(s|\\'s)?)))((((\\()?(red|gold|silver|king)( pack)?(\\))? )?((70|83|84|100|120)(s|\\'s)? )?)(\\bbox\\b))', 'gm')
const str = `Python does not support conditionals using lookaround, even though Python does support lookaround outside conditionals. Instead of a conditional like (?(?=regex)then|else), you can alternate two opposite lookarounds: (?=regex)then|(?!regex)else.
https://www.regular-expressions.info/lookaround.html
https://www.regular-expressions.info/conditional.html
LOOKAHEAD to see if EITHER pattern1 or pattern2 exists
pattern1 = ((\\()?(red|gold|silver|king)( pack)?(\\))?)
pattern2 = ((70|83|84|100|120)(s|'s)?)
IF one of the patterns exists in the string, THEN look for
pattern1 box
pattern2 box
pattern1 pattern2 box
IS NOT cases - things that I do NOT want to match
box
box
Marlboro Box - this is a perfect example of a NOT case - I do NOT want to match this string
OR maybe I do ... ARGH - NO I do not want to match BOX!!
moving box - example that I NEVER want to match ... ARGHHH
junk 's matchbox car
matchboxracer
boxer - we NEVER think about the NOT cases ... lol mitch and I fought about this for years. recently he meantioned the NEED for NOT
IS cases - aka - things that I WANT TO MATCH
Marlboro 100's Box
Marlboro Gold Pack 100's Box
Marlboro Special Blend (Gold Pack) 100's Box
Marlboro Silver Pack Box
Marlboro Special Blend (Red Pack) 100s Box
Pall Mall RED 100 BOX
Marlboro Special Blend (Gold Pack) Box
`;
// 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