const regex = /(?<!```html\s*)(<link href=.*?)(?=^\s*$)/gmis;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?<!```html\\s*)(<link href=.*?)(?=^\\s*$)', 'gmis')
const str = `
# PATTERNS
## Style Blocks (2 patterns)
- ***Matches:***
- All \`<style> any code here </style> blocks that aren't preceded by \`\`\`css + any amount of optional whitespace
>> NOTES FOR THE FOLLOWING PATTERN:
• This requires the \`regex\` library, not Python's built-in-crap
• This requires the \`Single Line\` (regex101) or \`regex.DOTALL\` (Python regex) flag
### Pattern: Old version (would have replaced all punctuation with \`punctuation\` from the string library)
(?<!\`\`\`css\\s*)(\\<style\\>[\\sa-z0-9\\-\\.\\[\\{\\]\\}:;#]+\\<\\/style\\>)
>> NOTES FOR THE FOLLOWING PATTERN:
• This requires the \`regex\` library, not Python's built-in-crap
• This requires the \`Single Line\` (regex101) or \`regex.DOTALL\` (Python regex) flag
### Pattern: Newest version (much better)
(?<!\`\`\`css\\s*)(<style>.*?<\\/style>)
## This does the same thing but for \`<!DOCTYPE html> any code here </html>\`
>> NOTES FOR THE FOLLOWING PATTERN:
• This requires the \`regex\` library, not Python's built-in-crap
• This requires the \`Single Line\` (regex101) or \`regex.DOTALL\` (Python regex) flag
### Pattern:
(?<!\`\`\`html\\s*)(<!DOCTYPE html>.*?<\\/html>)
## This matches all blocks of code containing \`<link href=>\` up to, but not including, an empty line
>> NOTES FOR THE FOLLOWING PATTERN:
• This requires the \`regex\` library, not Python's built-in-crap
• This requires the \`Single Line\` (regex101) or \`regex.DOTALL\` (Python regex) flag
### Pattern:
(?<!\`\`\`html\\s*)(<link href=.*?)(?=^\\s*\$)
<br>
(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)(><)
<br>
# TEST TEXT
<br>
<style>
.list-group-mine .list-group-item {
background-color: black;
color: white;
border-top: 1px solid #0091b5;
border-left-color: #fff;
border-right-color: #fff;
}
.list-group-mine .list-group-item:hover {
background-color: red;
}
</style>
\`\`\`css
<style>
.list-group-mine .list-group-item {
background-color: black;
color: white;
border-top: 1px solid #0091b5;
border-left-color: #fff;
border-right-color: #fff;
}
.list-group-mine .list-group-item:hover {
background-color: red;
}
</style>
\`\`\`
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<div class="list-group list-group-mine">
<a class="list-group-item" href="https://bit.ly/3SICqay"><strong>Link to the SO Post</strong></a>
<a class="list-group-item" href="/path"><strong>Item 2</strong></a>
<a class="list-group-item" href="/path"><strong>Item 3</strong></a>
</div>
<br>
##### Before Bootstrap
<!DOCTYPE html>
<html lang="en">
<head>
<title>TABLE</title>
</head>
<body>
<table>
<thead>
<tr>
<th>Name</th>
<th>Number</th>
</tr>
</thead>
<tbody>
<tr>
<td>Malachi</td>
<td>1-555-343-9867</td>
</tr>
<tr>
<td>Steve</td>
<td>1-555-734-8857</td>
</tr>
</tbody>
</table>
</body>
</html>
</br>
<code style="color: #f51686; font-weight: bold; font-size: 16pt;"> The HTML </code>
\`\`\`html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>CSS Images</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<div class="container">
<section class="hero">
<figure class="profile-pic-figure">
<img
src="img/profile-800x800.png"
alt="profile"
width="800"
height="800"
title="Profile Pic"
/>
<figcaption class="offscreen">Pookie Scrumptious</figcaption>
</figure>
<h1 class="h1">
<span class="nowrap">
Hello 👋
</span>
<span class="nowrap">
I'm Pookie
</span>
</h1>
</section>
</div>
</body>
</html>
\`\`\`
<br>
<code style="color: #f51686; font-weight: bold; font-size: 16pt;"> The CSS</code>
`;
// 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