OJ 정규식

1 개요[ | ]

2 해커랭크[ | ]

text
Copy
<h4 class="challengecard-title">\s*([^가]+?(?=<div))\s*<div
text
Copy
<div class="LinesEllipsis\s*">([A-Za-z ]+)<

3 코드그라운드[ | ]

text
Copy
<tr[^~]*?([0-9]+)</td>[^~]*?<a onclick[^>]+>([^<]+)</a>

4 LeetCode[ | ]

text
Copy
([0-9]+)</td><td[^>]+><div><a[^>]+>([a-zA-Z0-9\[\]\-/!, ]+)</a>
text
Copy
|-
| ? || [[LeetCode $1 $2]] || {{언어아이콘|_java}}

5 Kata[ | ]

text
Copy
<span>(\d)\skyu</span></div></div></div><div[^>]+><i[^>]+></i></div><a href="([^"]+)">([^<]+)
text
Copy
|-
| || [https://www.codewars.com$2 🔗] || {{카타 C++|카타 $1급 $3}}

6 Katacoda[ | ]

text
Copy
<a class="action start" href="/courses/([^"]+)" title="([^"]+)">Start Scenario</a>
text
Copy
|-
| || [https://www.katacoda.com/courses/$1 🔗] || [[$2]]

7 DataCamp[ | ]

text
Copy
<a class="chapter__exercise-link" href="([^"]*)">[^<]*<span[^>]*>[^<]*<img[^>]*>[^<]*</span>[^<]*<h5[^>]*>([^<]*)</h5>
text
Copy
|-
| || [$1 🔗] || [[데이터캠프R - $2]]

8 BOJ[ | ]

JavaScript
Copy
const regex = /<tr><td>([0-9]+)<\/td><td><a href="([^"]+)">([^<]+)<\/a><\/td><td>([^<]+)<\/td><td((?!>).)*>((?!<td).)*?<\/td><td>([0-9]+)<\/td>/g;
const replace = `| {{BOJ단계행|단계=$1|링크=https://www.acmicpc.net$2|제목=$3|설명=$4|총문제=$7}}`;
const found = document.body.outerHTML.match(regex);
console.log(found.map(e=>e.replace(regex, replace)).join("\n|-\n"));
JavaScript
Copy
const regex = /<a href="\/problem\/([0-9]+)">([^>]+)<\/a>/g;
const replace = `| {{BOJ행|$1|$2}}\n| {{언어아이콘|_cpp}}`;
const found = document.body.outerHTML.match(regex);
console.log(found.map(e=>e.replace(regex, replace)).join("\n|-\n"));

9 Programmers[ | ]

JavaScript
Copy
const regex = /<a href="\/learn\/courses\/30\/lessons\/([0-9]+)">([^>]+)(?:<span[^>]+>[^<]+<\/span>)?<\/a>\s*<small class="part-title">([^<]+)/g;
const replace = `| {{프로그래머스행|$1|$2|$3}}\n| {{언어아이콘|_cpp}}`;
const found = document.body.outerHTML.match(regex);
console.log(found.map(e=>e.replace(regex, replace)).join("\n|-\n").replace(/\[/g,'(').replace(/\]/g,')'));
JavaScript
Copy
console.log($x('//td[@class="title"]').map((t)=> {
const a = t.querySelectorAll('a')[0];
const id = a.href.split('/').pop();
const title = a.firstChild.textContent.replace(/\[/g,'(').replace(/\]/g,')').trim();
const cat = t.querySelectorAll('small')[0].textContent;
return `| {{프로그래머스행|${id}|${title}|${cat}}}\n| {{언어아이콘|_cpp}}`
}).join('\n|-\n')+'\n|}');

10 SWEA[ | ]

JavaScript
Copy
const regex = /<div class="widget-header-sub bd-none">\s+<div class="header-caption">\s+<span class="week_num">(\d+)\.<\/span>\s+<span class="week_text"><a [^']+'([^']+)'[^']+>\s+([a-zA-Z0-9가-힣\[\]\-/!, ]+) \s+/g;
const replace = `| {{SWEA행|$2|$1|$3}}\n| {{언어아이콘|_cpp}}`;
const found = document.body.outerHTML.match(regex);
console.log(found.map(e=>e.replace(regex, replace)).join("\n|-\n"));