Subtitle Find & Replace — Edit SRT, VTT, and TXT Without Touching Timestamps
Find and replace text across SRT, VTT, and TXT subtitle files right in your browser. Regex, case-sensitive, and whole-word options. Your timestamps and cue numbers are never modified.
Find & Replace
Original
Drop a file to get startedResult
Your edited subtitle will appear hereHow It Works
Drop your file
Upload an SRT, VTT, or TXT subtitle file. Everything happens in your browser — no uploads, no account.
Enter your search
Type what to find and what to replace it with. Toggle regex, case-sensitive, or whole-word matching as needed.
Download the result
Click Replace All, review the changes in the Result pane, then download or copy your edited file. Timestamps stay untouched.
Before and After
An SRT file with a character named John that needs to become Jonathan:
1 00:00:01,000 --> 00:00:03,000 John walked into the room. 2 00:00:03,500 --> 00:00:06,000 "Hi, John," said Mary. 3 00:00:06,500 --> 00:00:09,000 Johnson watched from the corner.
After Find: John, Replace with: Jonathan, with Whole word only checked:
1 00:00:01,000 --> 00:00:03,000 Jonathan walked into the room. 2 00:00:03,500 --> 00:00:06,000 "Hi, Jonathan," said Mary. 3 00:00:06,500 --> 00:00:09,000 Johnson watched from the corner.
Cue numbers and timestamps are preserved exactly. Whole-word matching kept the name "Johnson" intact — only the standalone "John" was replaced. Two matches were edited.
Regex Pattern Reference
When the Use regex option is on, the find field accepts JavaScript regular expression syntax. Below are the most useful patterns for subtitle editing:
| Pattern | What it matches | Example |
|---|---|---|
| \d | Any digit 0–9 | matches "5" |
| \d+ | One or more digits | matches "123" or "2024" |
| \d{2,4} | 2 to 4 digits | matches "12", "123", or "1234" |
| \w | Letter, digit, or underscore | matches "a", "5", or "_" |
| \W | NOT a word character | matches space or punctuation |
| \s | Any whitespace | space, tab, newline |
| \S | NOT whitespace | letters, digits, punctuation |
| . | Any character except newline | matches any single character |
| \b | Word boundary | \bcat\b matches "cat" not "category" |
| ^ | Start of string | ^Hello matches a line starting with Hello |
| $ | End of string | bye$ matches "bye" at the end |
| * | 0 or more of previous | a* matches "", "a", or "aaa" |
| + | 1 or more of previous | a+ matches "a" or "aaa", not "" |
| ? | 0 or 1 of previous | colou?r matches "color" or "colour" |
| *? +? | Non-greedy quantifiers | <.+?> matches "<i>" not the rest of the line |
| [abc] | One of a, b, or c | matches any single listed char |
| [^abc] | NOT a, b, or c | excludes those characters |
| [a-z] | Lowercase letter range | matches any lowercase letter |
| (...) | Capture group | for use with $1, $2 in replacement |
| a|b | Either pattern | cat|dog matches either word |
| $1 $2 … | Back-reference (replacement) | insert captured group in output |
Common Subtitle Edit Patterns
These eight patterns cover the most frequent subtitle find-and-replace tasks. Paste them straight into the Find and Replace fields with the listed options:
| Goal | Find | Replace with | Options |
|---|---|---|---|
| Change a speaker name | John | Jonathan | Whole word, case-sensitive |
| Remove music notes | ♪\s* | (empty) | Use regex |
| Normalise ellipses to one character | \.{3,} | … | Use regex |
| Remove speaker labels (JOHN:) | ^[A-Z]{2,}:\s* | (empty) | Use regex |
| Remove italic tags | </?i> | (empty) | Use regex |
| Replace straight with smart quotes | "([^"]*)" | "$1" | Use regex |
| Strip trailing whitespace | \s+$ | (empty) | Use regex |
| Swap two adjacent words | (\w+) (\w+) | $2 $1 | Use regex |
What Find & Replace Can Do for Subtitles
Beyond simple text swaps, subtitle find-and-replace solves a wide range of editing problems that would otherwise need a code editor or a dedicated subtitle suite:
- Character renames — Update every line where a character speaks or is mentioned, even across long-form content.
- Terminology consistency — Standardise on a style guide (British vs. American English, project glossary, client-specific terminology).
- Punctuation normalisation — Convert straight quotes to smart quotes, three-dot ellipses to a single … character, multiple spaces to single spaces.
- Speaker label removal — Strip patterns like
JOHN:from captioned dialogue when preparing translations or simplified subtitles. - Music notation cleanup — Remove ♪ wrapping lyrics in karaoke or musical captions.
- Formatting tag removal — Strip individual
<i>,<b>, or<font>tags when they're unwanted in a specific output. - Typo and OCR correction — Fix recurring misspellings or OCR errors in scanned subtitle imports.
- Bulk content edits — Update product or brand names across a long-form subtitle file.
How the Tool Parses Subtitle Structure
Generic find-and-replace tools treat subtitle files as plain text, which means a careless pattern like \d+ can wipe out timestamps and break your subtitles. This tool parses each format specifically:
SRT
The file is split on blank lines into cue blocks. For each block, the first line (cue index) and the second line (timestamp) are excluded from find-and-replace. The third line onwards is the dialogue, which is the only part the pattern touches. Multi-line dialogue is processed line by line.
VTT
The file is also split on blank lines, but the parser is smarter. The WEBVTT header block at the top, any NOTE blocks (file comments), and any STYLE blocks (CSS styling) are detected and passed through completely unchanged. For each remaining cue block, the parser locates the timestamp line by searching for the --> separator — which means cue identifiers (the optional name line above the timestamp) are also preserved. Find-and-replace runs only on dialogue lines below the timestamp.
TXT
Plain text files have no structural rules, so find-and-replace is applied to the entire content. Useful when you want to edit transcript exports or notes that have no SRT/VTT structure.
Choosing the Right Options for Your Edit
Case-sensitive
Off by default. When off, the regex flag is gi and the pattern matches regardless of case. Turn on when you want to preserve capitalisation differences — for example, replacing only capitalised John but leaving lowercase john alone.
Whole word only
When on, the tool automatically wraps your find pattern in \b word-boundary markers. This prevents partial matches: searching for cat with whole-word on will not match the "cat" inside "category" or "scatter". Combine with regex mode if you want word-boundary matching on only part of a complex pattern (turn whole-word off and place \b manually).
Use regex
When on, the find string is treated as a JavaScript regular expression instead of literal text. Special characters like ., *, +, ?, (, and [ become regex metacharacters. Capture groups in the find field can be referenced in the replace field with $1, $2, etc.
Step-by-Step Recipes for Common Scenarios
Below are explicit walkthroughs for the five most common subtitle find-and-replace tasks.
Recipe 1: Replacing a character name across an entire subtitle file
If a character was renamed during translation or editing — for example, 'John' needs to become 'Jonathan' — find-and-replace can update every occurrence at once while keeping partial matches like 'Johnson' intact.
- Drag the subtitle file into the drop zone.
- In the Find field, type John.
- In the Replace with field, type Jonathan.
- Check Whole word only to avoid matching Johnson or Johnny.
- Check Case-sensitive if you only want to replace capitalised John (and not john in lowercase dialogue).
- Click Replace All. The match counter shows how many lines were edited.
- Review the Result pane and click Download.
Recipe 2: Removing music notation (♪) from karaoke subtitles
Karaoke and song subtitles often wrap lyrics in music notes like ♪ lyrics ♪. To strip them out for a clean dialogue-only file:
- Drag the file in.
- Toggle Use regex.
- In the Find field, type ♪\s* — the \s* matches any whitespace after the note.
- Leave Replace with empty.
- Click Replace All.
- Optionally run a second pass with \s+$ (regex, replace empty) to clean trailing whitespace.
- Download.
Recipe 3: Standardising terminology across a translation project
Translation projects often have inconsistent terminology — Council vs. Counsel, Strategist vs. Tactician. Subtitle Find & Replace can normalise across a single file at a time.
- Drag the subtitle file in.
- In Find, type the inconsistent variant (e.g. Counsel).
- In Replace with, type the correct version (e.g. Council).
- Toggle Whole word only and Case-sensitive as appropriate for your style guide.
- Click Replace All. The match counter confirms how many lines changed.
- Repeat for each term in your style guide.
- Download the final cleaned file.
Recipe 4: Normalising ellipses and smart quotes
Subtitle files from different sources mix straight quotes (") with smart quotes (“ and ”), and use various ellipsis forms (..., …, . . .). To normalise to a consistent style:
- Drag the file in.
- Toggle Use regex.
- To normalise ellipses, Find: \.{3,} Replace with: … Click Replace All.
- To convert straight double quotes to smart quotes, Find: "([^"]*)" Replace with: “$1” using the back-reference.
- Click Replace All again.
- Download the normalised file.
Recipe 5: Removing speaker labels like JOHN:
Some captioning workflows include all-caps speaker prefixes (JOHN:, MARY:) at the start of each line. To strip them:
- Drag the file in.
- Toggle Use regex.
- In Find, type ^[A-Z]{2,}:\s* — this matches an uppercase prefix at the start of a line, a colon, then optional whitespace.
- Leave Replace with empty.
- Click Replace All.
- Review the Result pane and download.
When to Use Subtitle Find & Replace
- Renaming characters or speakers across a long-form subtitle file.
- Standardising terminology when bridging two translators' work, or aligning to a client style guide.
- Removing speaker labels, music notation, or other captioning markers when preparing files for a different audience.
- Normalising punctuation across files from different sources (smart vs. straight quotes, ellipses, dashes).
- Fixing recurring typos or OCR errors in scanned subtitle imports.
- Removing or replacing formatting tags like
<i>or<font>in specific contexts. - Updating brand names, product names, or URLs across a subtitle file before publication.
Who Uses This Tool
Translators consolidating terminology across a translated subtitle file. Video editors and captioners cleaning up auto-generated subtitle drafts. YouTubers updating branding or sponsor mentions across episodes. Broadcasters preparing compliance edits. Localisation teams standardising on regional spelling. Anyone who would otherwise open the file in a code editor and risk corrupting the timestamps.
Why Use This Subtitle Find & Replace
- Timestamps are structurally protected — the parser skips them entirely, so no pattern (regex or otherwise) can corrupt them.
- Full regex support with capture groups and back-references (
$1,$2, etc.). - Smart VTT parsing preserves WEBVTT headers, STYLE blocks, NOTE blocks, and cue identifiers.
- Case-sensitive and whole-word options for precision.
- Match counter feedback after every replace operation.
- Both Download and Copy to Clipboard options on the result.
- Runs entirely in the browser — no upload, no account, no install, no usage tracking on file contents.
Regex Patterns Glossary
Key terminology for working with regex patterns in this tool and elsewhere.
- Regex / Regular expression
- A pattern language for matching text. JavaScript's built-in RegExp engine powers this tool's regex mode, which means any pattern that works in JavaScript (and most ECMAScript regex features) works here.
- Character class
- A set of characters in square brackets.
[aeiou]matches any vowel;[a-z]matches any lowercase letter;[^0-9]matches any non-digit. - Quantifier
- A symbol that controls how many times the previous pattern matches.
*(zero or more),+(one or more),?(zero or one),{n,m}(between n and m times). - Anchor
- A position-matching symbol that doesn't consume any text.
^for start of line,$for end of line,\bfor word boundary. - Capture group
- Parentheses around a pattern that "capture" the matched text. Use
$1,$2, etc. in the replacement field to reference what each group captured — for example,(\w+) (\w+)with replace$2 $1swaps the two words. - Back-reference
- A reference to a previously captured group, either inside the pattern itself (
\1,\2) or in the replacement string ($1,$2). - Greedy vs. non-greedy
- Quantifiers like
+and*are greedy by default — they match as much text as possible. Adding?makes them non-greedy:.+?matches the smallest possible string. - Escape sequence
- A backslash followed by a character, used to match special characters literally.
\\.matches a literal period;\\matches a literal backslash;\\(matches a literal opening parenthesis. - Flag
- A modifier that changes regex behaviour. This tool always uses
g(global, so every match is replaced) and addsi(case-insensitive) when Case-sensitive is off. - Look-ahead / Look-behind
- Advanced patterns that match a position relative to another pattern without consuming text.
foo(?=bar)matchesfooonly if followed bybar. Supported by the underlying RegExp engine but rarely needed for subtitle edits.
Frequently Asked Questions
Can I use regex in the find field?
Yes. Toggle "Use regex" and your find string is treated as a JavaScript RegExp pattern. The global flag is always set, with case-insensitive added when case-sensitive is off. Useful for matching patterns like \bMr\.\s+\w+ to find any "Mr." followed by a name, or \d{4} for year numbers in dialogue.
Will this break my subtitle timestamps?
No. The tool parses your file into structural blocks. For SRT files, the first two lines of each block (cue index and timestamp) are skipped — find-and-replace only touches dialogue lines. For VTT, the parser identifies timestamp lines by the " --> " separator and edits only lines below it. Timestamps remain mathematically untouched.
Does it work with VTT files that have styling cues?
Yes. The WEBVTT header block, STYLE blocks (CSS), and NOTE blocks (comments) are all detected and passed through unchanged. Find-and-replace runs only on actual caption text. Cue identifiers (the optional name line above a timestamp line) are also preserved. REGION blocks pass through as cues — uncommon enough that this rarely matters.
Is my file uploaded anywhere?
No. The Subtitle Find & Replace runs entirely in your browser using local JavaScript. Your file is read with the FileReader API, processed in memory, and never sent to any server. No account, no install, no usage tracking on file contents. Close the browser tab and the data is gone.
Can I do multiple replacements at once?
Currently the tool runs one find-and-replace operation per cycle. For sequential edits, click Replace All, then either click Copy to Clipboard and paste elsewhere, or click Download, then re-upload the edited file and run the next pattern. Multi-pattern batch mode is a planned future enhancement.
What if my replacement produces zero matches?
The tool displays "0 matches found" so you know nothing changed. The most common causes are case sensitivity being on when the source text uses different case, the "Whole word only" option excluding partial matches, or a regex pattern with a typo. Double-check the find field and toggles, then try again.
How do I remove all-caps shouting from subtitles?
Toggle Use regex and Case-sensitive, then search for \b[A-Z]{2,}\b to find any sequence of two or more uppercase letters. The Replace field can't directly lowercase via this tool (no JavaScript expression in the replacement), so download the file and pass the result through a text-case converter, or do targeted per-word replacements.
Can I use back-references like $1 in the replacement field?
Yes, when Use regex is enabled. Use parentheses in the find field to capture groups, then $1, $2, and so on in the replacement field to reference them. For example, find (\w+) (\w+) and replace with $2 $1 to swap two consecutive words. Up to 9 capture groups are supported by the browser's regex engine.
Does it handle multi-line subtitle cues correctly?
Yes. The parser splits each subtitle block by blank lines first, then walks each block's lines individually. For multi-line dialogue (when one cue spans multiple lines), find-and-replace is applied to each text line separately. Pattern matching does not cross line boundaries unless you explicitly add \n inside a regex pattern.
What's the difference between "Whole word only" and the regex \b boundary?
They produce the same result when both are used. The "Whole word only" checkbox automatically wraps your find pattern in \b...\b boundaries; regex mode lets you place \b manually. Use the checkbox for simple cases. Use regex with manual boundaries when you want word-boundary matching on only part of a complex pattern.
Can I use this to fix translation typos in bulk?
Yes. Subtitle Find & Replace is well-suited for terminology consistency across a translated subtitle file — for example, replacing every variation of a character's name, fixing a misspelled location, or standardising on either British or American English forms (colour/color, behaviour/behavior, defence/defense). All changes preserve cue numbers and timestamps.
Does the regex support Unicode character classes?
The regex engine is your browser's built-in RegExp, which supports most ECMAScript regex features. Unicode property escapes like \p{Letter} require the u flag, which this tool does not currently expose. Standard escapes (\w, \d, \s, \b) work and match basic ASCII. For full Unicode coverage, use character ranges or alternation.
What happens if my regex pattern is invalid?
The tool shows "Invalid regex pattern" in red and does not modify your file. Common causes are unmatched parentheses, brackets, or curly braces; an unescaped special character; or an invalid character class range. Edit your find field and click Replace All again. The original text in the left pane stays intact throughout.
Will this work with .ass or .ssa subtitle formats?
The file picker accepts .srt, .vtt, and .txt. ASS and SSA files have a more complex structure (Script Info, Styles, Events sections) that this tool doesn't parse specifically. If you upload one as .txt, find-and-replace will work on the text content, but you risk corrupting the styles section. Best practice: convert to SRT or VTT first.
How do I remove music notation from karaoke subtitles?
Toggle Use regex, then in Find enter ♪\s* (or \u266A\s* if you prefer escape codes). Leave Replace with empty. Click Replace All. The \s* matches any whitespace after each note so spacing is cleaned in the same pass. Then optionally run \s+$ (regex, replace empty) to trim trailing whitespace.
Can I find and replace inside formatting tags like <i> or <b>?
Yes. Tags like <i>, <b>, <u>, <font>, and their closing variants are part of the dialogue text in SRT and VTT files, so they are subject to find-and-replace. To remove italic tags everywhere, toggle Use regex and search for </?i> with an empty replacement. For bulk tag removal across all formatting types, the dedicated Subtitle Tag Stripper is simpler.
Related Tools
Other free subtitle tools you can use alongside Find & Replace: