bongho3k downloadsFind and replace text using regular expressions with real-time preview and match highlighting.
Safely clean up Markdown in Obsidian with live previews, match highlighting, and reusable multi-step pipelines.
Preview every change before it touches your note. Run a one-off replacement or save a complete cleanup workflow for PDFs, AI-generated text, and Markdown.
| Capability | Obsidian's built-in replace | Regex Replace |
|---|---|---|
| Regular expressions and capture groups | — | ✓ |
| Before/after preview | — | ✓ |
| Match highlighting | — | ✓ |
| Replace within a selection | — | ✓ |
| Reusable multi-step cleanup pipelines | — | ✓ |
| Import regex-pipeline rulesets | — | ✓ |
Everything runs locally in your vault. The plugin does not send note content to external services.
$1, $2, etc.)g), case-insensitive (i), and multiline (m) flagsCopy a search and replacement into Regex Replace, review the preview, and apply it only when the result is correct for your note.
| Cleanup | Search | Replace | Flags |
|---|---|---|---|
| Collapse repeated spaces | {2,} |
|
g |
| Remove trailing whitespace | [ \t]+$ |
(empty) | gm |
| Collapse 3+ blank lines | \n{3,} |
\n\n |
g |
| Change H2 headings to H3 | ^## |
### |
gm |
| Convert ISO dates to day/month/year | (\d{4})-(\d{2})-(\d{2}) |
$3/$2/$1 |
g |
| Remove Markdown bold markers | \*\*([^*]+)\*\* |
$1 |
g |
| Convert simple wiki links to Markdown links | `[[([^] | ]+)]]` | [$1]($1.md) |
[!CAUTION] A regular expression can match more text than intended. Check the highlighted preview before applying a replacement, especially with broad patterns.
main.js, manifest.json, and styles.css from the latest release<YourVault>/.obsidian/plugins/regex-replace/Cmd/Ctrl + Shift + HCmd/Ctrl + P → "Open Regex Replace"┌─────────────────────────────────────────────┐
│ Search Pattern: [Enter regex pattern] │
│ Replace With: [Replacement text] │
│ │
│ Flags: ☑ g (global) ☐ i ☐ m │
│ ☐ Replace in selection only │
│ │
│ 3 match(es) found │
│ │
│ Before: Hello [world], hello [world] │ ← Yellow highlight
│ After: Hello [WORLD], hello [WORLD] │ ← Green highlight
│ │
│ Matches (3): │
│ • "world" → "WORLD" │
│ │
│ [Replace All] [Cancel] │
└─────────────────────────────────────────────┘
| Use Case | Search Pattern | Replace | Result |
|---|---|---|---|
| Find numbers | \d+ |
[NUM] |
abc123 → abc[NUM] |
| Date format | (\d{4})-(\d{2})-(\d{2}) |
$3/$2/$1 |
2024-12-08 → 08/12/2024 |
| Remove extra spaces | \s+ |
|
Multiple spaces → single |
| Wiki to MD link | \[\[(.+?)\]\] |
[$1]($1.md) |
[[Note]] → [Note](Note.md) |
| Header H2 → H3 | ^## |
### |
## Title → ### Title |
| Remove bold | \*\*(.+?)\*\* |
$1 |
**bold** → bold |
| Extract link text | \[(.+?)\]\((.+?)\) |
$1: $2 |
[text](url) → text: url |
| Flag | Name | Description |
|---|---|---|
g |
Global | Replace all matches (not just the first) |
i |
Ignore Case | Case-insensitive matching |
m |
Multiline | ^ and $ match line starts/ends |
Use parentheses () to capture groups and reference them with $1, $2, etc.:
Search: (\w+)@(\w+)\.com
Replace: User: $1, Domain: $2
Input: [email protected]
Output: User: test, Domain: example
A ruleset is a named list of find/replace rules applied in sequence — each rule operates on the previous rule's output. Useful for repeatable, multi-step cleanups (e.g. normalize headers, then collapse whitespace, then fix links).
In Settings → Regex Replace → Pipeline rulesets, click Add ruleset, name it, and write rules using regex-pipeline syntax (one rule per block):
"SEARCH"->"REPLACE"
"\s+"->" "
"##\s"gm->"### "
"foo"gi->"bar"); without them, gm is used.Click Import from regex-pipeline to read every ruleset file in
<vault>/.obsidian/regex-rulesets/ and convert it into a native ruleset.
This ruleset removes trailing whitespace, reduces large blank gaps, and normalizes repeated spaces. Add it under Settings → Regex Replace → Pipeline rulesets, then preview it with Apply ruleset (pipeline).
"[ \\t]+$"gm->""
"\\n{3,}"g->"\\n\\n"
" {2,}"g->" "
Access via Settings → Regex Replace:
| Setting | Description | Default |
|---|---|---|
| Default Flags | Pre-selected regex flags | g |
| Show Preview | Display before/after preview | true |
| History Limit | Max saved patterns | 10 |
| Pipeline rulesets | Add/edit/delete/import reusable rulesets | — |
# Clone the repository
git clone https://github.com/bongho/obsidian-regex-replace.git
# Install dependencies
npm install
# Build for development (watch mode)
npm run dev
# Build for production
npm run build
# Run tests
npx ts-node --transpile-only test.ts
0BSD License — see LICENSE for details.
Contributions are welcome! Please feel free to submit a Pull Request.
If you find this plugin useful, consider:
Made with ❤️ for the Obsidian community