{"id":14430,"date":"2026-09-15T18:49:37","date_gmt":"2026-09-15T09:49:37","guid":{"rendered":"https:\/\/code-plus.jp\/gp\/?page_id=14430"},"modified":"2026-09-15T19:32:05","modified_gmt":"2026-09-15T10:32:05","slug":"regex-checker","status":"publish","type":"page","link":"https:\/\/code-plus.jp\/gp\/regex-checker\/","title":{"rendered":"regex-checker"},"content":{"rendered":"<!-- \u0f3b\u273f\ud835\udc0f\ud835\udc00\ud835\udc06\ud835\udc04\u0f3a -->\r\n<!-- \u0f3b.mezzala\uff08\u4f59\u767d\u8abf\u6574\uff1apage\u4e0a\uff09\u0f3a -->\r\n<hr class=\"spacer-mezzala\" \/>\r\n\r\n\r\n\r\n\r\n<hr id=\"ch-TextConverter\" anchor \/>\r\n<div class=\"pg-saracnvtvkaa bg-hackingGate\">\r\n\r\n  <header class=\"page-header mx-auto\">\r\n    <!-- \u2756\u30d1\u30f3\u304f\u305a\u30ea\u30b9\u30c8 --><div><!-- breadcrumb.php -->\n<style>\n\/* \u2756breadcrumb.leckermaul\uff08\u30d1\u30f3\u304f\u305a\u30ea\u30b9\u30c8\uff09\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u0f1a\u0f36\u22b0\u27e1\u22b1\u0f36\u0f1a\u0f3a *\/\n.zaratan .breadcrumb.leckermaul {\n\twidth: 100%;\n\tmax-width: 92.5vw;\n\tmargin-inline: auto;\n}\n\n.zaratan .breadcrumb.leckermaul :is(ul, ol) {\n\tmin-height: 3rem;\n\tline-height: initial;\n\tfont-size: 0;\n\tletter-spacing: 0;\n\toverflow: hidden;\n}\n\n.zaratan .breadcrumb.leckermaul li {\n\tdisplay: inline;\n\tline-height: 1.6;\n\tfont-size: clamp(0.775rem, calc(0.775rem + ((1vw - 0.225rem) * 0.1563)), 0.8750rem);\n}\n\n.zaratan .breadcrumb.leckermaul li>*,\n.zaratan .breadcrumb.leckermaul li::before {\n\tposition: relative;\n\ttop: 0.125em;\n\tdisplay: inline-flex;\n\talign-items: center;\n}\n\n.zaratan .breadcrumb.leckermaul a {\n\tdisplay: inline;\n\tcolor: var(--c-base-300, hsl(233, 6%, 74%));\n\tmargin-right: .5em;\n}\n\n.zaratan .breadcrumb.leckermaul li:nth-of-type(n+2) a {\n\tmargin-left: .5em;\n}\n\n.zaratan .breadcrumb.leckermaul .current_page_item a {\n\tpointer-events: none;\n\tcolor: var(--c-base-300, hsl(233, 6%, 74%));\n}\n\n@media (any-hover:hover) {\n\t.zaratan .breadcrumb.leckermaul a:hover {\n\t\tcolor: var(--c-base-300, hsl(233, 6%, 74%));\n\t}\n}\n\n\/* .separator *\/\n.zaratan .breadcrumb.leckermaul li:nth-of-type(n+2)::before,\n.zaratan .breadcrumb.leckermaul.chevron-right li:nth-of-type(n+2)::before {\n\tcontent: \">\";\n\tcolor: var(--c-base-300, hsl(233, 6%, 74%))\n}\n\n.zaratan .breadcrumb.leckermaul.slash li:nth-of-type(n+2)::before {\n\tcontent: \"\/\";\n}\n\n.zaratan .breadcrumb.leckermaul.trigon-bullet li:nth-of-type(n+2)::before {\n\tcontent: \"\u2023\";\n}\n<\/style>\n\n\n<nav class=\"breadcrumb leckermaul py-0.5r mx-auto py-0.5r\">\n  <ul class=\"breadcrumb-wrapper\">\n    <!-- \u30c8\u30c3\u30d7\u30da\u30fc\u30b8\u3078\u306e\u30ea\u30f3\u30af\u3092\u8868\u793a -->\n    <li><a href=\"https:\/\/code-plus.jp\/gp\/\"><i><\/i>\u30c8\u30c3\u30d7<\/a><\/li>\n\n          <!-- \u56fa\u5b9a\u30da\u30fc\u30b8\uff08\u305d\u308c\u4ee5\u5916\uff09\uff1a \u5148\u7956\u30da\u30fc\u30b8\u540d\u3068\u3001\u73fe\u5728\u306e\u30da\u30fc\u30b8\u540d\u3092\u8868\u793a -->\n      <li class=\"current_page_item\"><a>\u30c4\u30fc\u30eb<\/a><\/li>    <!-- \/\/\/if (is_page()) -->\n\n  <\/ul>\n<\/nav><\/div>\r\n  <\/header><!-- \/\/\/.inheader -->\r\n\r\n\r\n\r\n\r\n  <!-- \u0f3b\u00a7\ud835\udc12\ud835\udc04\ud835\udc02\ud835\udc13\ud835\udc08\ud835\udc0e\ud835\udc0d\u0f3a -->\r\n  <section class=\"sect-cnvtVkaA-Intro\" style=\"contain-intrinsic-size:1000px;\">\r\n    <header class=\"section__inheader mx-auto scroll-fadeIn\">\r\n      <div class=\"hgroup-wrapper d-iblock mb-0.5r\">\r\n        <h1 class=\"fz-xxl hdg-page mb-0.25pc\"><span>regex-checker<\/span><\/h1>\r\n        <p class=\"page-foreword fz-ss\">\u6b63\u898f\u8868\u73fe\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u30c1\u30a7\u30c3\u30af\u3057\u307e\u3059\u3002<\/p>\r\n      <\/div><!-- \/\/\/.hgroup -->\r\n\r\n      <a class=\"fl-right badge is-outlined is-gray fz-xs bdrs-0.25r\" href=\"#ch-Explanation\">\r\n        <i class=\"icon mas ma-help\"><\/i>&nbsp;<span>\u4f7f\u3044\u65b9<\/span>\r\n      <\/a>\r\n    <\/header><!-- \/\/\/.inheader -->\r\n  <\/section>\r\n\r\n\r\n  <!-- \u0f3b\u00a7\ud835\udc12\ud835\udc04\ud835\udc02\ud835\udc13\ud835\udc08\ud835\udc0e\ud835\udc0d\u0f3a -->\r\n  <hr id=\"ch-Converter\" anchor \/>\r\n  <section class=\"sect-cnvtVkaA-Converter\" style=\"contain-intrinsic-size:1000px;\">\r\n    <div class=\"section__interior fxd-row mx-auto\">\r\n      <figure class=\"section__leftlane\">\r\n        <div class=\"hgroup-wrapper\">\r\n          <h3 class=\"fz-rg hdg-section mb-0.25pc\"><span>\u25bc\u6b63\u898f\u8868\u73fe\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044<\/span><\/h3>\r\n        <\/div><!-- \/\/\/.hgroup -->\r\n\r\n<div class=\"rowgroup is-full bdrs-0.5r\">\r\n  <label class=\"label is-narrow is-outlined fz-rg\"><input type=\"checkbox\" class=\"checkbox flag-toggle\" data-flag=\"g\" checked>g<\/label>\r\n  <label class=\"label is-narrow is-outlined fz-rg\"><input type=\"checkbox\" class=\"checkbox flag-toggle\" data-flag=\"i\">i<\/label>\r\n  <label class=\"label is-narrow is-outlined fz-rg\"><input type=\"checkbox\" class=\"checkbox flag-toggle\" data-flag=\"m\">m<\/label>\r\n  <label class=\"label is-narrow is-outlined fz-rg\"><input type=\"checkbox\" class=\"checkbox flag-toggle\" data-flag=\"s\">s<\/label>\r\n  <label class=\"label is-narrow is-outlined fz-rg\"><input type=\"checkbox\" class=\"checkbox flag-toggle\" data-flag=\"u\">u<\/label>\r\n  <label class=\"label is-narrow is-outlined fz-rg\"><input type=\"checkbox\" class=\"checkbox flag-toggle\" data-flag=\"y\">y<\/label>\r\n<\/div><!-- \/\/\/.rowgroup -->\r\n\r\n        <div class=\"chest-wrapper mt-1r\">\r\n          <div class=\"regex-inputline\">\r\n            <span class=\"regex-slash\">\/<\/span>\r\n            <input type=\"text\" id=\"regex-pattern\" class=\"input regex-pattern\" placeholder=\"\u6b63\u898f\u8868\u73fe\u3092\u5165\u529b\u2026\">\r\n            <span class=\"regex-slash\">\/<\/span>\r\n            <input type=\"text\" id=\"regex-flags\" class=\"input regex-flags\" value=\"g\" maxlength=\"6\">\r\n          <\/div>\r\n          <ins id=\"regex-error\"><\/ins>\r\n        <\/div><!-- \/\/\/.chest -->\r\n\r\n        <div class=\"hgroup-wrapper mt-1r\">\r\n          <h4 class=\"fz-md hdg-section mb-0.25pc\"><span>\u25bc\u30c6\u30b9\u30c8\u6587\u5b57\u5217<\/span><\/h4>\r\n        <\/div><!-- \/\/\/.hgroup -->\r\n\r\n        <div class=\"chest-wrapper relatived\">\r\n          <textarea class=\"textarea\" id=\"test-text\" style=\"height:18pc;\" placeholder=\"\u3053\u3053\u306b\u30c6\u30b9\u30c8\u7528\u306e\u6587\u5b57\u5217\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\"><\/textarea>\r\n          <ins id=\"decodedMessage\"><\/ins>\r\n        <\/div><!-- \/\/\/.chest -->\r\n\r\n        <p class=\"ta-center mt-1r\">\r\n          <button type=\"button\" class=\"button is-outlined is-primary mx-0.5r\" onclick=\"loadSampleText()\">\u30b5\u30f3\u30d7\u30eb\u3092\u8aad\u307f\u8fbc\u3080<\/button>\r\n          <button type=\"button\" class=\"button is-outlined is-gray mx-0.5r\" onclick=\"clearAll()\">\u30af\u30ea\u30a2<\/button>\r\n        <\/p>\r\n      <\/figure><!-- \/\/\/.leftlane -->\r\n\r\n      <figure class=\"section__centerlane\">\r\n        <aside class=\"sticky-sidebar fxd-column pc-center\" style=\"height:23.5rem;\">\r\n          <a id=\"btn-change\" class=\"button is-solided is-primary my-0.5r\" href=\"#ch-Converter\" disabled><span>\u00ab&nbsp;\u5909\u66f4<\/span><\/a>\r\n          <a id=\"btn-add\" class=\"button is-solided is-primary my-0.5r\" href=\"#ch-Converter\" disabled><span>+&nbsp;\u8ffd\u52a0<\/span><\/a>\r\n        <\/aside>\r\n      <\/figure><!-- \/\/\/.centerlane -->\r\n\r\n\r\n      <figure class=\"section__rightlane\">\r\n        <div class=\"hgroup-wrapper\">\r\n          <h3 class=\"fz-rg hdg-section mb-0.25pc\"><span>\u25bc\u6b63\u898f\u8868\u73fe\u30c1\u30fc\u30c8\u30b7\u30fc\u30c8<\/span><\/h3>\r\n        <\/div><!-- \/\/\/.hgroup -->\r\n\r\n        <div id=\"regex-match-info\" class=\"mt-0.5r mb-1r\">\r\n          <b class=\"fw-500\">\u30de\u30c3\u30c1\uff1a<\/b>&nbsp;<span id=\"match-count\">0<\/span>\u4ef6\r\n        <\/div>\r\n\r\n        <div class=\"chest-wrapper ovy-scroll\" style=\"max-height:24pc;\">\r\n          <table class=\"table cheat-sheet\">\r\n            <thead>\r\n              <tr class=\"tier\">\r\n                <th>\u6b63\u898f\u8868\u73fe<\/th>\r\n                <th>\u610f\u5473<\/th>\r\n              <\/tr>\r\n            <\/thead>\r\n            <tbody id=\"cheat-sheet-body\"><\/tbody>\r\n          <\/table>\r\n        <\/div><!-- \/\/\/.chest -->\r\n      <\/figure><!-- \/\/\/.rightlane -->\r\n    <\/div><!-- \/\/\/.interior.fxd-row -->\r\n  <\/section>\r\n\r\n\r\n  <!-- \u0f3b\u00a7\ud835\udc12\ud835\udc04\ud835\udc02\ud835\udc13\ud835\udc08\ud835\udc0e\ud835\udc0d\u0f3a -->\r\n  <hr id=\"ch-Explanation\" anchor \/>\r\n  <section class=\"sect-cnvtVkaA-Explanation pt-3r\" style=\"contain-intrinsic-size:1000px;\">\r\n    <div class=\"section__interior mx-auto scroll-fadeIn\">\r\n\r\n    <\/div><!-- \/\/\/.interior -->\r\n  <\/section><!-- \/\/\/.section -->\r\n\r\n\r\n  <!-- \u0f3b\u00a7\ud835\udc03\ud835\udc04\ud835\udc0f\ud835\udc00\ud835\udc11\ud835\udc13\ud835\udc0c\ud835\udc04\ud835\udc0d\ud835\udc13\u0f3a -->\r\n  <hr id=\"ch-Relation\" anchor \/>\r\n  <section class=\"sect-cnvtVkaA-Relation pt-3r\" style=\"contain-intrinsic-size:1000px;\">\r\n    <div class=\"section__interior mx-auto scroll-fadeIn\">\r\n      <div class=\"hgroup-wrapper mb-0.5pc\">\r\n        <h5 class=\"hdg-relation fz-rg\"><span>\u95a2\u9023\u30c4\u30fc\u30eb<\/span><\/h5>\r\n      <\/div><!-- \/\/\/.hgroup -->\r\n\r\n      <ul class=\"shelf-wrapper_pc shelfA\" data-cols_pc=\"2\">\r\n\r\n      <\/ul><!-- \/\/\/.shelf -->\r\n    <\/div><!-- \/\/\/.interior -->\r\n  <\/section><!-- \/\/\/.section -->\r\n\r\n\r\n  <!-- \u0f3b\u00a7\ud835\udc03\ud835\udc04\ud835\udc0f\ud835\udc00\ud835\udc11\ud835\udc13\ud835\udc0c\ud835\udc04\ud835\udc0d\ud835\udc13\u0f3a -->\r\n\r\n  <section class=\"sect-cnvtVkaA-Relation2 pt-3r\" style=\"contain-intrinsic-size:1000px;\">\r\n    <div class=\"section__interior mx-auto scroll-fadeIn\">\r\n      <div class=\"hgroup-wrapper mb-0.5pc\">\r\n\r\n      <\/div><!-- \/\/\/.hgroup -->\r\n    <\/div><!-- \/\/\/.interior -->\r\n  <\/section><!-- \/\/\/.section -->\r\n\r\n\r\n\r\n  <!-- \u0f3b.mediano\uff08\u4f59\u767d\u8abf\u6574\uff1apage\u4e0b\uff09\u0f3a -->\r\n  <hr class=\"spacer-mediano\" \/>\r\n\r\n<\/div><!-- \/\/\/\u25b2.page  -->\r\n\r\n\r\n\r\n\r\n<script>\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\r\n  \/\/\u30cf\u30a4\u30e9\u30a4\u30c8\u8868\u793a\u7528CSS\u3092\u6ce8\u5165\r\n  const appendCSS = `\/* regex-shown\uff1aCSS *\/\r\n.textarea:not(:focus):has(+.regex-shown) {\r\n  color: transparent;\r\n}\r\n.textarea + .regex-shown {\r\n  position: absolute;\r\n  top: 0;\r\n  left: 0;\r\n  pointer-events: none;\r\n  white-space: pre-wrap;\r\n  word-wrap: break-word;\r\n  max-width: 100%;\r\n  height: auto;\r\n  padding: .5em .5em;\r\n  border-radius: 3px;\r\n  line-height: 1.5;\r\n  font-size: var(--fz-ss);\r\n  color: transparent;\r\n}\r\n.textarea:not(:focus) + .regex-shown {\r\n  color: var(--c-text);\r\n}\r\n.regex-match {\r\n  background: hsla(210, 90%, 55%, 0.35);\r\n  border-radius: 2px;\r\n  color: inherit;\r\n}\r\n.cheat-sheet tr.is-selected {\r\n  background: hsla(210, 90%, 55%, 0.15);\r\n}\r\n.cheat-sheet td:first-child {\r\n  white-space: nowrap;\r\n  font-family: monospace;\r\n}`;\r\n  const STYLE = document.createElement('style');\r\n  STYLE.textContent = appendCSS;\r\n  document.getElementsByTagName('head')[0].appendChild(STYLE);\r\n\r\n\r\n  const patternInput = document.getElementById('regex-pattern');\r\n  const flagsInput = document.getElementById('regex-flags');\r\n  const testTextArea = document.getElementById('test-text');\r\n  const errorArea = document.getElementById('regex-error');\r\n  const matchCountEl = document.getElementById('match-count');\r\n  const flagCheckboxes = document.querySelectorAll('.flag-toggle');\r\n  const btnChange = document.getElementById('btn-change');\r\n  const btnAdd = document.getElementById('btn-add');\r\n\r\n\r\n  \/\/HTML\u30a8\u30b9\u30b1\u30fc\u30d7\r\n  function escapeHtml(str) {\r\n    return str.replace(\/&\/g, '&amp;').replace(\/<\/g, '&lt;').replace(\/>\/g, '&gt;');\r\n  }\r\n\r\n  \/\/\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u8868\u793a\r\n  function showRegexError(msg) {\r\n    errorArea.innerHTML = `\r\n<p class=\"alert is-ghost is-error mt-0.5r\">\r\n<i class=\"icon mas ma-error c-error mr-0.5r\"><\/i>\r\n<span>${msg}<\/span>\r\n<\/p>`;\r\n  }\r\n\r\n\r\n  \/\/\u30d5\u30e9\u30b0\uff1a\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u2192\u5165\u529b\u6b04\r\n  function syncFlagsFromCheckboxes() {\r\n    const flags = Array.from(flagCheckboxes).filter(cb => cb.checked).map(cb => cb.dataset.flag).join('');\r\n    flagsInput.value = flags;\r\n    runRegexCheck();\r\n  }\r\n\r\n  \/\/\u30d5\u30e9\u30b0\uff1a\u5165\u529b\u6b04\u2192\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\r\n  function syncCheckboxesFromFlags() {\r\n    const flags = flagsInput.value;\r\n    flagCheckboxes.forEach(cb => { cb.checked = flags.includes(cb.dataset.flag); });\r\n    runRegexCheck();\r\n  }\r\n\r\n  flagCheckboxes.forEach(cb => cb.addEventListener('change', syncFlagsFromCheckboxes));\r\n  flagsInput.addEventListener('input', syncCheckboxesFromFlags);\r\n\r\n\r\n  \/\/\u30cf\u30a4\u30e9\u30a4\u30c8\u8868\u793a\uff08\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2\u306e\u76f4\u5f8c\u306b\u30aa\u30fc\u30d0\u30fc\u30ec\u30a4\u3092\u91cd\u306d\u308b\uff09\r\n  function updateHighlight(text, matches) {\r\n    let html = '';\r\n    let lastIndex = 0;\r\n\r\n    matches.forEach(match => {\r\n      html += escapeHtml(text.slice(lastIndex, match.start));\r\n      const matchedStr = escapeHtml(text.slice(match.start, match.end)) || ' '; \/\/\u7a7a\u6587\u5b57\u30de\u30c3\u30c1\u3082\u898b\u3048\u308b\u3088\u3046\u306b\r\n      html += `<mark class=\"regex-match\">${matchedStr}<\/mark>`;\r\n      lastIndex = match.end;\r\n    });\r\n    html += escapeHtml(text.slice(lastIndex));\r\n\r\n    let overlay = document.getElementById('test-text-shown');\r\n    if (!overlay) {\r\n      overlay = document.createElement('div');\r\n      overlay.id = 'test-text-shown';\r\n      overlay.className = 'regex-shown';\r\n      testTextArea.insertAdjacentElement('afterend', overlay);\r\n    }\r\n    overlay.innerHTML = html;\r\n  }\r\n\r\n\r\n  \/\/\u6b63\u898f\u8868\u73fe\u306e\u5b9f\u884c\r\n  function runRegexCheck() {\r\n    const patternStr = patternInput.value;\r\n    const flags = flagsInput.value;\r\n    const text = testTextArea.value;\r\n\r\n    errorArea.innerHTML = '';\r\n\r\n    if (!patternStr) {\r\n      updateHighlight(text, []);\r\n      matchCountEl.textContent = '0';\r\n      return;\r\n    }\r\n\r\n    let regex;\r\n    try {\r\n      regex = new RegExp(patternStr, flags);\r\n    } catch (error) {\r\n      showRegexError('\u6b63\u898f\u8868\u73fe\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093: ' + error.message);\r\n      updateHighlight(text, []);\r\n      matchCountEl.textContent = '0';\r\n      return;\r\n    }\r\n\r\n    const matches = [];\r\n    if (flags.includes('g')) {\r\n      let m;\r\n      while ((m = regex.exec(text)) !== null) {\r\n        matches.push({ start: m.index, end: m.index + m[0].length });\r\n        if (m[0].length === 0) regex.lastIndex++; \/\/\u7a7a\u6587\u5b57\u30de\u30c3\u30c1\u306e\u7121\u9650\u30eb\u30fc\u30d7\u9632\u6b62\r\n      }\r\n    } else {\r\n      const m = regex.exec(text);\r\n      if (m) matches.push({ start: m.index, end: m.index + m[0].length });\r\n    }\r\n\r\n    matchCountEl.textContent = matches.length;\r\n    updateHighlight(text, matches);\r\n  }\r\n\r\n  patternInput.addEventListener('input', runRegexCheck);\r\n  testTextArea.addEventListener('input', runRegexCheck);\r\n\r\n\r\n  \/\/\u30c1\u30fc\u30c8\u30b7\u30fc\u30c8\r\n  const cheatSheet = [\r\n    { regex: '^', desc: '\u884c\u306e\u5148\u982d' },\r\n    { regex: '$', desc: '\u884c\u306e\u672b\u5c3e' },\r\n    { regex: '.', desc: '\u4efb\u610f\u306e\u4e00\u6587\u5b57\uff08\u6539\u884c\u4ee5\u5916\uff09' },\r\n    { regex: '[...]', desc: '\u62ec\u5f27\u5185\u306e\u3044\u305a\u308c\u304b\u4e00\u6587\u5b57<br>\u4f8b: [abc] \u306a\u3089 a\u30fbb\u30fbc \u306e\u3069\u308c\u304b' },\r\n    { regex: '[^...]', desc: '\u62ec\u5f27\u5185\u4ee5\u5916\u306e\u4e00\u6587\u5b57<br>\u4f8b: [^0-9] \u306a\u3089\u6570\u5b57\u4ee5\u5916' },\r\n    { regex: '*', desc: '\u76f4\u524d\u306e0\u56de\u4ee5\u4e0a\u306e\u7e70\u308a\u8fd4\u3057' },\r\n    { regex: '+', desc: '\u76f4\u524d\u306e1\u56de\u4ee5\u4e0a\u306e\u7e70\u308a\u8fd4\u3057' },\r\n    { regex: '?', desc: '\u76f4\u524d\u306e0\u56de\u304b1\u56de' },\r\n    { regex: '{n}', desc: 'n\u56de\u306e\u7e70\u308a\u8fd4\u3057' },\r\n    { regex: '{m,n}', desc: 'm\u56de\u4ee5\u4e0a\u3001n\u56de\u4ee5\u4e0b\u306e\u7e70\u308a\u8fd4\u3057' },\r\n    { regex: '|', desc: '\u3069\u3061\u3089\u304b\uff08OR\uff09<br>\u4f8b: cat|dog' },\r\n    { regex: '(...)', desc: '\u30b0\u30eb\u30fc\u30d7\u5316\uff08\u30ad\u30e3\u30d7\u30c1\u30e3\u3042\u308a\uff09' },\r\n    { regex: '(?:...)', desc: '\u30b0\u30eb\u30fc\u30d7\u5316\uff08\u30ad\u30e3\u30d7\u30c1\u30e3\u306a\u3057\uff09' },\r\n    { regex: '\\\\d', desc: '\u6570\u5b571\u6587\u5b57\uff08[0-9]\u3068\u540c\u3058\uff09' },\r\n    { regex: '\\\\D', desc: '\u6570\u5b57\u4ee5\u5916\u306e1\u6587\u5b57' },\r\n    { regex: '\\\\w', desc: '\u82f1\u6570\u5b57\u30fb\u30a2\u30f3\u30c0\u30fc\u30b9\u30b3\u30a2\u306e1\u6587\u5b57' },\r\n    { regex: '\\\\W', desc: '\\\\w \u4ee5\u5916\u306e1\u6587\u5b57' },\r\n    { regex: '\\\\s', desc: '\u7a7a\u767d\u6587\u5b57\uff08\u30b9\u30da\u30fc\u30b9\u30fb\u30bf\u30d6\u30fb\u6539\u884c\uff09' },\r\n    { regex: '\\\\S', desc: '\u7a7a\u767d\u6587\u5b57\u4ee5\u5916\u306e1\u6587\u5b57' },\r\n    { regex: '\\\\b', desc: '\u5358\u8a9e\u306e\u5883\u754c' },\r\n    { regex: 'a-z', desc: '\u5c0f\u6587\u5b57\u306e\u534a\u89d2\u82f1\u5b57' },\r\n    { regex: 'A-Z', desc: '\u5927\u6587\u5b57\u306e\u534a\u89d2\u82f1\u5b57' },\r\n    { regex: '0-9', desc: '\u6570\u5b57' },\r\n  ];\r\n\r\n  const cheatBody = document.getElementById('cheat-sheet-body');\r\n  let selectedSnippet = null;\r\n\r\n  cheatSheet.forEach(item => {\r\n    const tr = document.createElement('tr');\r\n    tr.className = 'tier';\r\n    tr.innerHTML = `<td>${escapeHtml(item.regex)}<\/td><td>${item.desc}<\/td>`;\r\n    tr.addEventListener('click', () => {\r\n      cheatBody.querySelectorAll('tr').forEach(row => row.classList.remove('is-selected'));\r\n      tr.classList.add('is-selected');\r\n      selectedSnippet = item.regex;\r\n      btnChange.disabled = false;\r\n      btnAdd.disabled = false;\r\n    });\r\n    cheatBody.appendChild(tr);\r\n  });\r\n\r\n\r\n  \/\/\u5909\u66f4\uff1a\u5165\u529b\u6b04\u3092\u9078\u629e\u4e2d\u306e\u30b9\u30cb\u30da\u30c3\u30c8\u3067\u7f6e\u304d\u63db\u3048\r\n  btnChange.addEventListener('click', () => {\r\n    if (selectedSnippet === null) return;\r\n    patternInput.value = selectedSnippet;\r\n    runRegexCheck();\r\n    patternInput.focus();\r\n  });\r\n\r\n  \/\/\u8ffd\u52a0\uff1a\u30ab\u30fc\u30bd\u30eb\u4f4d\u7f6e\u306b\u30b9\u30cb\u30da\u30c3\u30c8\u3092\u633f\u5165\r\n  btnAdd.addEventListener('click', () => {\r\n    if (selectedSnippet === null) return;\r\n    const start = patternInput.selectionStart ?? patternInput.value.length;\r\n    const end = patternInput.selectionEnd ?? patternInput.value.length;\r\n    const value = patternInput.value;\r\n    patternInput.value = value.slice(0, start) + selectedSnippet + value.slice(end);\r\n    const newPos = start + selectedSnippet.length;\r\n    patternInput.focus();\r\n    patternInput.setSelectionRange(newPos, newPos);\r\n    runRegexCheck();\r\n  });\r\n\r\n\r\n  \/\/\u30b5\u30f3\u30d7\u30eb\u8aad\u307f\u8fbc\u307f\uff0f\u30af\u30ea\u30a2\r\n  const SAMPLE_TEXT = `<p>| \u52171 | \u52172 | \u52173 |\r\n| --- | --- | --- |\r\n| \u5185\u5bb91 | \u5185\u5bb92 | \u5185\u5bb93 |<\/p>`;\r\n\r\n  window.loadSampleText = function () {\r\n    testTextArea.value = SAMPLE_TEXT;\r\n    patternInput.value = '<p>.*<\/p>';\r\n    runRegexCheck();\r\n  };\r\n\r\n  window.clearAll = function () {\r\n    patternInput.value = '';\r\n    testTextArea.value = '';\r\n    errorArea.innerHTML = '';\r\n    runRegexCheck();\r\n  };\r\n\r\n\r\n  \/\/\u521d\u671f\u5b9f\u884c\r\n  runRegexCheck();\r\n});\r\n<\/script>","protected":false},"excerpt":{"rendered":"\u6b63\u898f\u8868\u73fe\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u30c1\u30a7\u30c3\u30af\u3057\u307e\u3059\u3002 &nbsp;\u4f7f\u3044\u65b9 \u25bc\u6b63\u898f\u8868\u73fe\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 g i m s u y \/ \/ \u25bc\u30c6\u30b9\u30c8\u6587\u5b57\u5217 \u30b5\u30f3\u30d7\u30eb\u3092\u8aad\u307f\u8fbc\u3080 \u30af\u30ea\u30a2 \u00ab&nbsp;\u5909\u66f4 +&nbsp;\u8ffd\u52a0 \u25bc\u6b63\u898f\u8868\u73fe\u30c1[...]","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"templates\/page-converter.php","meta":{"_acf_changed":false,"sns_share_botton_hide":"","vkExUnit_sns_title":"","_vk_print_noindex":"","_exclude_from_list_pages":"","footnotes":"","vk-ltc-link":"","vk-ltc-target":"0"},"categories":[21],"tags":[],"group":[],"pg":[],"class_list":["post-14430","page","type-page","status-publish","category-tool"],"acf":[],"veu_head_title_object":{"title":"","add_site_title":""},"_links":{"self":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages\/14430","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/comments?post=14430"}],"version-history":[{"count":10,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages\/14430\/revisions"}],"predecessor-version":[{"id":14446,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pages\/14430\/revisions\/14446"}],"wp:attachment":[{"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/media?parent=14430"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/categories?post=14430"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/tags?post=14430"},{"taxonomy":"group","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/group?post=14430"},{"taxonomy":"pg","embeddable":true,"href":"https:\/\/code-plus.jp\/gp\/wp-json\/wp\/v2\/pg?post=14430"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}