* 初始化可视化调试器
()
| 1512 | * 初始化可视化调试器 |
| 1513 | */ |
| 1514 | function initVisualDebugger() { |
| 1515 | const testBtn = document.getElementById('visualTestBtn'); |
| 1516 | const regexInput = document.getElementById('visualRegex'); |
| 1517 | const testTextArea = document.getElementById('visualTestText'); |
| 1518 | const resultDiv = document.getElementById('visualResult'); |
| 1519 | const errorMsg = document.getElementById('visualErrorMsg'); |
| 1520 | const flagCheckboxes = document.querySelectorAll('.flag-btn input[type="checkbox"]'); |
| 1521 | |
| 1522 | if (!testBtn) return; |
| 1523 | |
| 1524 | // 标志复选框事件 |
| 1525 | flagCheckboxes.forEach(checkbox => { |
| 1526 | checkbox.addEventListener('change', updateFlagsInputFromCheckbox); |
| 1527 | }); |
| 1528 | |
| 1529 | function updateFlagsInputFromCheckbox() { |
| 1530 | const flags = Array.from(flagCheckboxes) |
| 1531 | .filter(cb => cb.checked) |
| 1532 | .map(cb => cb.value) |
| 1533 | .join(''); |
| 1534 | document.getElementById('visualFlags').value = flags; |
| 1535 | } |
| 1536 | |
| 1537 | testBtn.addEventListener('click', doVisualTest); |
| 1538 | regexInput.addEventListener('keyup', function(e) { |
| 1539 | if (e.key === 'Enter') doVisualTest(); |
| 1540 | }); |
| 1541 | testTextArea.addEventListener('keyup', function(e) { |
| 1542 | if (e.key === 'Enter' && e.ctrlKey) doVisualTest(); |
| 1543 | }); |
| 1544 | |
| 1545 | // 新增:输入时自动实时匹配 |
| 1546 | regexInput.addEventListener('input', doVisualTest); |
| 1547 | testTextArea.addEventListener('input', doVisualTest); |
| 1548 | |
| 1549 | function doVisualTest() { |
| 1550 | let regexStr = regexInput.value.trim(); |
| 1551 | const testText = testTextArea.value.trim(); |
| 1552 | |
| 1553 | errorMsg.textContent = ''; |
| 1554 | |
| 1555 | if (!regexStr) { |
| 1556 | errorMsg.textContent = '请输入正则表达式'; |
| 1557 | return; |
| 1558 | } |
| 1559 | if (!testText) { |
| 1560 | errorMsg.textContent = '请输入要测试的文本'; |
| 1561 | return; |
| 1562 | } |
| 1563 | |
| 1564 | // 新增:支持 /pattern/flags 写法 |
| 1565 | let pattern = regexStr; |
| 1566 | let flags = Array.from(flagCheckboxes) |
| 1567 | .filter(cb => cb.checked) |
| 1568 | .map(cb => cb.value) |
| 1569 | .join(''); |
| 1570 | |
| 1571 | // 如果是 /pattern/flags 形式 |
no test coverage detected