3tej home
← Writing & Text

What is Text Repeater?

A text repeater takes a word, phrase, or emoji and copies it as many times as you choose, with an optional separator between copies. It builds the result instantly in your browser and never sends what you type to a server. Useful for padding, test fixtures, lists, and ASCII art.

Text Repeater

Repeat any text - a word, a phrase, an emoji - any number of times, with or without separators. Useful for spam tests, padding, ASCII art, and design mockups.

About the text repeater

A text repeater takes a string of any length and concatenates it N times with an optional separator between copies. The 3Tej version runs entirely in your browser, supports custom separators, and handles emoji and Unicode the same way it handles ASCII. Nothing is uploaded; the input stays on your machine and the output is yours to copy.

The tool exists because the same job lives in three places elsewhere: "text".repeat(n) in JavaScript, "text" * n in Python, and =REPT("text", n) in spreadsheets. Each requires opening an editor or a sheet, and none of them puts a separator between copies. This page bundles the count, the separator, and the copy step into one widget so the round trip from idea to clipboard is a single click. Common use cases include padding text fields for layout testing, generating fixture data, building markdown rulers (--- repeated), and producing display-only ASCII art.

How it works

The underlying operation is a one-line array-fill-and-join: build an array of length N where every element is the input string, then call join(separator). JavaScript stores strings as immutable UTF-16 sequences, so even multi-byte emoji and surrogate pairs are copied byte-for-byte.

output = Array(count).fill(text).join(separator)
length = count * text.length + (count - 1) * separator.length
limit  = 10,000 repeats per click (browser-side guard)
  • Count: number of copies (1 to 10,000).
  • Separator: space, newline, comma + space, none, or a custom string.
  • Output length: predictable, scales linearly with count.

Worked example

Repeat the phrase "hello world" 5 times with comma + space separator.

  1. Text: "hello world" (11 characters).
  2. Count: 5.
  3. Separator: ", " (2 characters).
  4. Array: ["hello world", "hello world", "hello world", "hello world", "hello world"].
  5. Join: 5 x 11 + 4 x 2 = 55 + 8 = 63 characters.
Result: "hello world, hello world, hello world, hello world, hello world" (63 chars). Same input with newline separator produces a 5-line block; with no separator it becomes "helloworldhelloworldhelloworldhelloworldhelloworld" (55 chars).

Separator reference

SeparatorUse caseOutput length formulaExample (3 x "ok")
SpaceSentence padding, ASCII artN x len + (N - 1)ok ok ok
New line (\n)One per line, list generationN x len + (N - 1)ok / ok / ok
Comma + spaceCSV, prose enumerationN x len + 2(N - 1)ok, ok, ok
NoneGlued strings, density testsN x lenokokok
Pipe ( | )Human-readable separatorsN x len + 3(N - 1)ok | ok | ok
CustomAny other delimiterN x len + S(N - 1)user-defined

Common pitfalls

  • Forgetting the separator. "no" repeated 5 times with no separator becomes "nonono" plus another "no" = "nononono". If you want spaced words, choose Space.
  • Browser freeze on extreme counts. A 10,000-character input x 10,000 repeats is 100 MB and will lock most mobile browsers. The 10,000-repeat cap exists for a reason.
  • Pasting into a form that strips newlines. Many comment boxes collapse multi-line input into a single line. If line breaks matter, use comma + space or a visible character.
  • Emoji width. Multi-byte emoji (family, flag, profession with skin tone) count as one visual glyph but multiple UTF-16 code units. Length in characters is bigger than length in glyphs.
  • Spam filters. Repeated text triggers email and forum spam heuristics. Use sparingly outside of testing.
  • Trailing separator surprise. The tool joins with the separator, so it does NOT add a trailing separator after the last copy. Add one manually if your downstream parser needs it.

Practical uses

Repetition sounds trivial, but it solves a surprising number of small jobs cleanly. The table below pairs a common task with the settings that produce it.

TaskInputCount and separator
Padding a textarea for a layout testA lorem word or phraseHigh count, space
Building a one-per-line list for importA placeholder rowYour row count, new line
Making a markdown horizontal ruleA dash3 or more, no separator
Generating a CSV stubA column valueColumn count, comma + space
ASCII art or a progress-bar mockA block characterBar width, no separator

Because the result lands in a textarea and copies in one click, each of these is faster here than opening an editor to write a loop. The character and word counts under the output also let you confirm a padding string is exactly long enough before you paste it into the field you are testing.

Related tools and glossary

Frequently asked questions

What is the maximum repeat count?

The browser-side tool caps at 10,000 repeats per click to protect mobile devices from freezing. The actual character-output limit depends on your device memory: a phrase of 20 characters x 10,000 repeats is roughly 200 KB, well within textarea limits.

Can I use a newline as the separator?

Yes. Choose 'New line' from the separator dropdown to put each repetition on its own line. This is the standard way to pad textarea fields, create test fixtures, or generate one-per-line input for downstream tools.

Why do I need a custom separator?

Custom separators let you build comma-delimited lists, pipe-separated values, or repeated markers for parsing tests. Common choices: ' | ' for human-readable pipes, ';' for CSV-compatible alternatives, and '...' for ellipsis chains.

Does it preserve emoji and Unicode?

Yes. The tool treats the input as a JavaScript string, so emoji, accented Latin, CJK characters, and Arabic all repeat identically. Multi-code-point emoji (family emoji, skin-tone modifiers) repeat as a single visual unit because JavaScript string copy preserves the full sequence.

Is the input or output ever stored on a server?

No. The entire build runs in your browser via JavaScript on this page. The text you type never leaves your tab, no analytics events carry the content, and the result lives only in the textarea and your clipboard. You can verify by opening DevTools, switching to the Network tab, and confirming no requests are made when you click Repeat.

Sources

  • ECMAScript 2015 Specification, Array.prototype.fill and Array.prototype.join.
  • MDN Web Docs, String.prototype.repeat() reference.
  • Unicode Consortium, Unicode Technical Standard #51, Emoji.

Last updated 2026-05-28.