diff --git a/src/main/java/hae/HaE.java b/src/main/java/hae/HaE.java index ecc9e36..ca29590 100644 --- a/src/main/java/hae/HaE.java +++ b/src/main/java/hae/HaE.java @@ -20,7 +20,7 @@ public class HaE implements BurpExtension { public void initialize(MontoyaApi api) { // 设置扩展名称 api.extension().setName("HaE - Highlighter and Extractor"); - String version = "4.0.3"; + String version = "4.0.4"; // 加载扩展后输出的项目信息 Logging logging = api.logging(); diff --git a/src/main/java/hae/component/board/table/Datatable.java b/src/main/java/hae/component/board/table/Datatable.java index 5ac693b..207c9ee 100644 --- a/src/main/java/hae/component/board/table/Datatable.java +++ b/src/main/java/hae/component/board/table/Datatable.java @@ -30,6 +30,7 @@ public class Datatable extends JPanel { private final JTextField secondSearchField; private final TableRowSorter sorter; private final JCheckBox searchMode = new JCheckBox("Reverse search"); + private final JCheckBox regexMode = new JCheckBox("Regex mode"); private final String tabName; private final JPanel footerPanel; @@ -52,7 +53,7 @@ public class Datatable extends JPanel { private void initComponents(List dataList) { dataTable.setRowSorter(sorter); - + // 设置ID排序 sorter.setComparator(0, new Comparator() { @Override @@ -119,10 +120,12 @@ public class Datatable extends JPanel { optionsPanel.setLayout(new BoxLayout(optionsPanel, BoxLayout.X_AXIS)); // Settings按钮 - JPanel settingMenuPanel = new JPanel(new GridLayout(1, 1)); + JPanel settingMenuPanel = new JPanel(new GridLayout(2, 1)); settingMenuPanel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3)); JPopupMenu settingMenu = new JPopupMenu(); settingMenuPanel.add(searchMode); + settingMenuPanel.add(regexMode); + regexMode.setSelected(true); searchMode.addItemListener(e -> performSearch()); settingMenu.add(settingMenuPanel); @@ -163,8 +166,8 @@ public class Datatable extends JPanel { } private void performSearch() { - RowFilter firstRowFilter = getObjectObjectRowFilter(searchField); - RowFilter secondRowFilter = getObjectObjectRowFilter(secondSearchField); + RowFilter firstRowFilter = getObjectObjectRowFilter(searchField, true); + RowFilter secondRowFilter = getObjectObjectRowFilter(secondSearchField, false); if (searchField.getForeground().equals(Color.BLACK)) { sorter.setRowFilter(firstRowFilter); if (secondSearchField.getForeground().equals(Color.BLACK)) { @@ -176,24 +179,29 @@ public class Datatable extends JPanel { } } - private RowFilter getObjectObjectRowFilter(JTextField searchField) { + private RowFilter getObjectObjectRowFilter(JTextField searchField, boolean firstFlag) { return new RowFilter() { public boolean include(Entry entry) { String searchFieldTextText = searchField.getText(); - Pattern pattern = null; - try { - pattern = Pattern.compile(searchFieldTextText, Pattern.CASE_INSENSITIVE); - } catch (Exception ignored) { - } - - String entryValue = ((String) entry.getValue(1)).toLowerCase(); searchFieldTextText = searchFieldTextText.toLowerCase(); + String entryValue = ((String) entry.getValue(1)).toLowerCase(); boolean filterReturn = searchFieldTextText.isEmpty(); - if (pattern != null) { - filterReturn = filterReturn || pattern.matcher(entryValue).find() != searchMode.isSelected(); + boolean firstFlagReturn = searchMode.isSelected() && firstFlag; + if (regexMode.isSelected()) { + Pattern pattern = null; + try { + pattern = Pattern.compile(searchFieldTextText, Pattern.CASE_INSENSITIVE); + } catch (Exception ignored) { + } + + if (pattern != null) { + filterReturn = filterReturn || pattern.matcher(entryValue).find() != firstFlagReturn; + } + } else { + filterReturn = filterReturn || entryValue.contains(searchFieldTextText) != firstFlagReturn; } - return filterReturn || entryValue.contains(searchFieldTextText) != searchMode.isSelected(); + return filterReturn; } }; } diff --git a/src/main/java/hae/utils/DataManager.java b/src/main/java/hae/utils/DataManager.java index 9a02ea8..1176cbd 100644 --- a/src/main/java/hae/utils/DataManager.java +++ b/src/main/java/hae/utils/DataManager.java @@ -62,7 +62,7 @@ public class DataManager { RegularMatcher.putDataToGlobalMap(api, index, dataKey, dataObj.getStringList(dataKey).stream().toList(), false); }); } catch (Exception e) { - api.logging().logToOutput("loadHaEData:" + e.getMessage()); + // api.logging().logToOutput("loadHaEData:" + e.getMessage()); } }); }