Find and Replace is a thin UI on top of the browser's native RegExp engine. Every search compiles a JavaScript RegExp object with the global flag 'g' (and 'i' when case-insensitive is on), then walks the input with regex.exec() in a loop to collect every match index. Plain-text mode escapes regex metacharacters before compiling so that dots, parentheses, and dollar signs are treated literally.
Whole-word mode wraps your query with the \b word-boundary anchor on both sides. That works as expected for ASCII identifiers but has known gaps with Unicode: \b is defined against [A-Za-z0-9_], so a search for 'caf' inside 'cafe' counts as a word boundary against the 'e' even when the trailing letter is accented (cafe vs café). For non-Latin word boundaries you usually need regex mode with explicit Unicode property escapes.
Regex mode passes your pattern straight to new RegExp(), so the full JavaScript flavor is available: alternation, character classes, lookaheads and lookbehinds, capture groups, named groups, and Unicode property escapes (\p{Letter}, \p{Number}, requires the 'u' flag if you add it). Capture groups can be referenced in the replacement as $1, $2, and so on. An invalid pattern surfaces the engine error message inline rather than crashing the page.
Preserve-case mode inspects the original match before replacing: ALL CAPS matches become ALL CAPS replacements, Title Case matches become Title Case replacements, lowercase stays lowercase, and mixed case falls back to the literal replacement string. This is helpful when renaming a term that appears at the start of sentences as well as inside them.
Ignore-extra-spaces builds a flexible regex that allows any run of whitespace (\s+) wherever your query has a single space. Match indices are calculated against the original text so highlights line up correctly even though the underlying pattern was loosened. This is the right choice when copy-pasting from PDFs or Word documents that introduce stray spaces.
Live preview, replace history, and the split or unified view are all client-side state. Settings and the last twenty replace operations persist via localStorage under 'find-replace-settings' and 'find-replace-history' keys, so your preferences survive a reload without anything ever reaching a server.
Performance is dominated by regex.exec rather than rendering. Inputs in the multi-megabyte range are still interactive, but pathological patterns (catastrophic backtracking with nested quantifiers like (a+)+) can hang the tab — that is a property of every JavaScript regex engine, not specific to this tool. If a pattern looks slow, anchor it with ^ or $ where possible, or simplify the alternation.