Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Regex Replace

bonghobongho6k downloads

Find and replace text using regular expressions with real-time preview and match highlighting.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates11

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.

Why Regex Replace?

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.

Features

  • Regular Expression Support: Full JavaScript regex syntax including capture groups ($1, $2, etc.)
  • Real-time Preview: See matches highlighted before replacing
  • Match Highlighting: Visual diff showing before/after changes
  • Regex Flags: Toggle global (g), case-insensitive (i), and multiline (m) flags
  • Selection Mode: Replace only within selected text
  • Pattern History: Save and reuse recent search patterns
  • Pipeline Rulesets: Save reusable multi-step rulesets and apply them in sequence, with a step-by-step preview — and import existing regex-pipeline rulesets
  • Selection-only Rulesets: Mark a ruleset as selection-only and it stays that way — hotkeys included — instead of resetting every time the dialog opens
  • Dark/Light Theme: Optimized for both Obsidian themes

Popular cleanup recipes

Copy 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.

Installation

Requires Obsidian 1.13.0 or later — the settings tab uses the declarative settings API introduced in that version, so its settings appear in Obsidian's settings search. Version 1.1.5 remains available for older releases.

From Obsidian Community Plugins (Recommended)

  1. Open Settings → Community plugins in Obsidian.
  2. Select Browse and search for Regex Replace.
  3. Select Install, then Enable.

Manual Installation

  1. Download main.js, manifest.json, and styles.css from the latest release
  2. Create a folder: <YourVault>/.obsidian/plugins/regex-replace/
  3. Copy the downloaded files into this folder
  4. Reload Obsidian and enable the plugin in Settings → Community Plugins

Usage

Open the replace dialog

  • Hotkey: Cmd/Ctrl + Shift + H
  • Command Palette: Cmd/Ctrl + P → "Open Regex Replace"

Preview before replacing

+--------------------------------------+
| Search pattern:  \b(world)\b         |
| Replace with:    WORLD               |
|                                      |
| Flags: [x] g   [ ] i   [ ] m         |
|        [ ] Replace in selection only |
|                                      |
| 2 match(es) found                    |
|                                      |
| Preview                              |
|  Before: Hello world, hello world    |
|  After:  Hello WORLD, hello WORLD    |
|                                      |
|  2 match(es):                        |
|   - "world" -> "WORLD"               |
|                                      |
|           [ Replace all ] [ Cancel ] |
+--------------------------------------+

Before highlights every match in yellow, and After highlights each replacement in green. Previously used patterns reappear in a Recent patterns dropdown below the preview.

Regex examples

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

Flags

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

Capture groups

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

Pipeline Rulesets

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).

Defining a ruleset

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->"### "
  • Inline flags follow the search quote (e.g. "foo"gi->"bar"); without them, gm is used.
  • Replacements may span multiple lines.

Applying a ruleset

  • Command Palette: "Apply ruleset (pipeline)" → pick a ruleset → review the step-by-step preview (match count per rule) → Apply pipeline.
  • Hotkey: each ruleset also gets its own Ruleset: <name> command, bindable to a hotkey or a Commander / Editing Toolbar button.
  • A rule with an invalid regex is skipped and reported, never aborting the whole run.

Running a ruleset on the selection only

Turn on Apply to selection only — either on the ruleset itself in settings, or with the checkbox in the pipeline dialog. Both write to the same stored value, so the choice survives the next open and applies to the Ruleset: <name> hotkey too.

When such a ruleset runs with nothing selected, it does nothing and shows a notice. It never falls back to the whole note, so a mis-fired hotkey cannot rewrite the file. Apply to selection only by default seeds the flag on newly added and imported rulesets, and rulesets saved before this option existed follow it until their own toggle is set.

Importing from regex-pipeline

Click Import from regex-pipeline to read every ruleset file in <vault>/.obsidian/regex-rulesets/ and convert it into a native ruleset.

Starter pipeline: clean pasted text

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->" "

Settings

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 —
Apply to selection only by default Seeds the flag on new and imported rulesets false

Development

# 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

Changelog

1.1.8

  • Store "apply to selection only" on the ruleset, so it survives reopening the dialog (#9)
  • Honour that flag in the Ruleset: <name> commands, which previously always rewrote the whole note
  • Refuse to run a selection-only ruleset with an empty selection instead of falling back to the whole note
  • Add a global "apply to selection only by default" setting that seeds new and imported rulesets
  • Run the plugin review's lint ruleset locally (eslint 10 + eslint-plugin-obsidianmd)

1.1.7

  • Drop the imperative display() fallback; the settings tab is declarative only
  • Raise minAppVersion to 1.13.0 — vaults below it stay on 1.1.5 via versions.json

1.1.6

  • Adopt the declarative settings API, so settings are indexed by Obsidian's settings search
  • Replace remaining document.createElement calls with Obsidian's createEl helpers
  • Tighten capture-group substitution types in src/engine.ts

1.1.5

  • Add dynamic ruleset commands for direct Obsidian invocation (Ruleset: )
  • Enable integration with Commander, Editing Toolbar, and macro plugins
  • Add maintainer info to README (Korean developer, AI researcher)

1.1.4

  • Reposition the plugin around safe previews and reusable cleanup pipelines
  • Add practical Markdown cleanup recipes and a built-in feature comparison
  • Align package metadata and documentation with the 0BSD license

1.1.0

  • Pipeline rulesets: save reusable multi-step rulesets, apply in sequence with step preview
  • Import rulesets from the regex-pipeline plugin
  • New command: "Apply ruleset (pipeline)"

1.0.0

  • Initial release
  • Regex find and replace with preview
  • Real-time match highlighting
  • Pattern history
  • Selection-only mode

License

0BSD License — see LICENSE for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Support

If you find this plugin useful, consider:

  • Starring the repository on GitHub
  • Reporting issues or suggesting features
  • Contributing code improvements

About

Maintained by Bongho Lee, a Korean developer and AI researcher. Feedback, issues, and pull requests are welcome!


Made with ❤️ for the Obsidian community

HealthExcellent
ReviewPassed
About
Perform search-and-replace using full JavaScript regular expressions with capture groups and regex flags. Preview matches and replacements in real time with before/after highlighting, apply changes to entire notes or selections, and save reusable pattern history.
SearchEditing
Details
Current version
1.1.8
Last updated
4 days ago
Created
10 months ago
Updates
11 releases
Downloads
6k
Compatible with
Obsidian 1.13.0+
Platforms
Desktop, Mobile
License
0BSD
Report bugRequest featureReport plugin
Author
bonghobongho
github.com/bongho
GitHubbongho
  1. Community
  2. Plugins
  3. Search
  4. Regex Replace

Related plugins

LanguageTool Integration

Advanced grammar and spell checking, powered by LanguageTool.

Smart Connections

Find related notes and excerpts while writing. Your AI link building copilot displays relevant content in graph + list view. A local embedding model powers semantic search. Zero setup. No API key.

Meta Bind

Make your notes interactive with inline input fields, metadata displays, and buttons.

Tag Wrangler

Rename, merge, toggle, and search tags from the tag pane.

Quick Switcher++

Enhanced Quick Switcher, search open panels, and symbols.

Advanced Tables

Improved table navigation, formatting, and manipulation.

Thino

Quickly capture memos and display them in the sidebar with a heatmap. (Closed source)

Omnisearch

Intelligent search for your notes, PDFs, and OCR for images.

Editing Toolbar

The Editing Toolbar is modified from cMenu, which provides more powerful customization settings and has many built-in editing commands to be a MS Word-like toolbar editing experience.

Outliner

Work with your lists like in Workflowy or Roam Research.