String Tools
Input/Result
Hold for a moment
Parameter
Actions
Examples
Insert / Trim
a.jpg <img src='a.jpg <img src='a.jpg'/>
bb.png -- insertAtBeginning("<img src='") --> <img src='bb.png -- insertAtEnd("'/>") --> <img src='bb.png'/>
c.gif <img src='c.gif <img src='c.gif'/>
⎵ ⎵ ⎵1⎵ ⎵ 1⎵ ⎵ 1
⎵ ⎵ ⎵ ⎵ ⎵ ⎵2 ⎵ ⎵ -- trimAtBeginning() --> 2⎵ ⎵ -- trimAtEnd() --> 2
⎵3⎵ ⎵ ⎵ 3⎵ ⎵ ⎵ 3
Delete
img-a.jpeg a.jpeg a.jp
img-b.jpeg -- deleteAtBeginning("img-") --> b.jpeg -- deleteAtEnd("eg") --> b.jp
xxx-c.jpeg xxx-c.jpeg xxx-c.jp
img-a.jpeg a.jpeg a
img-b.jpeg -- deleteAtBeginning(4 ) --> b.jpeg -- deleteAtEnd(4 ) --> b
xxx-c.jpeg xxx-c.jpeg c
Replace
Replace in every line (
replace(p1,p2) ) or over multiple lines (
replaceAllText(p1,p2) ).
1-clipboard.jpg 1-img.jpg 1-img.jpg
2-clipboard.jpg 2-img.jpg 2-img.jpg
3-clipboard.jpg 3-img.jpg 3-img.jpg
-- replace("-clipboard","-img") --> -- replaceAllText("img\nimg","clipboard") -->
img img clipboard
img img
4-clipboard.jpg 4-img.jpg 4-img.jpg
**hallo** und **welt** -- replacePair("**","<b>;</b>") --> <b>hallo</b> und <b>welt</b>
Replace html to special characters so that you can use it in <pre>...</pre>
<b>hallo@home<b> -- html2special() --> <b>hallo@home</b>
<-- special2html() --
Split
The;quick;brown;fox -- split(";") --> The
quick
brown
fox
The;quick;brown;fox -- splitIncl(";") --> The;
quick;
brown;
fox
The
quick
brown -- splitRev() --> The;quick;brown;fox
fox
With regular expression:
The;quick,brown.fox -- split("regexp:[;.,] ") --> The
quick
brown
fox
001 line1 002 line2 003 line3 -- splitIncl("regexp:line[0-9]+ " ) --> 001 line1
002 line2
003 line3
Markdown Tables
spalte1;spalte2 | spalte1 | spalte2 |
a;b -- mdTableJoin() --> | ------- | ------- |
c;d | a | b |
| c | d |
| spalte1 | spalte2 | | spalte1 | spalte2 | spalte3 |
| ------- | ------- | | ------- | ------- | ------- |
| a | b | -- mdTableJoin() --> | a | b | x |
| c | d | | c | d | y |
spalte3;x;y
<table> | spalte1 | spalte2 |
<tr><th>spalte1</th><th>spalte2</th></tr> -- htmlTable2md() --> | ------- | ------- |
<tr><td>a</td><td>b</td></tr> | a | b |
<tr><td>c</td><td>d</td></tr> | c | d |
</table>
Match (regexp)
match(p1) transforms every line by the matched expression p1.
mega1234 1234
666killer -- match("[0-9]+") --> 666
ha000mmer 000
OnlyText
matchAndReplace(p1,p2) tries to match the expression p1 and replace it with p2.
mega1234 megaNUMBER
666killer -- matchAndReplace("[0-9]+","NUMBER") --> NUMBERkiller
ha000mmer haNUMBERmmer
OnlyText OnlyText
matchAndReplace(p1,p2) also allows to build groups and replace them
mega1234 1234mega
666killer -- matchAndReplace("([a-z]*)([0-9]+)(a-z*)","$2$1$2") --> 666killer
ha000mmer 000hammer
OnlyText OnlyText
Just replace every second occurance in a line
a a a A
a b a -- matchAndReplace("(.*?)(a)(.*?)(a)(.*?)","$1$2$3A$5") --> a b A
a b b a c c c a b b A c c c
Delete Matching Lines / Duplicates
The The The brown
quick quick quick fox
brown jumps brown over
fox the fox dog
jumps -- deleteMatchingLines("o") --> lazy jumps -- deleteNonMatchingLines("o") -->
over over
the the
lazy lazy
dog dog
aaa aaa
bbb bbb
ccc -- deleteDuplicates() --> ccc
bbb
aaa
ccc
With regular expression
The quick
quick jumps
brown lazy
fox
jumps -- deleteMatchingLines("regexp:[oe]" ) -->
over
the
lazy
dog
Sort
2 1 4
4 -- sortAsc() --> 2 --> sortDesc() --> 4
4 4 2
1 4 1
Advanced
In the parameter field you can put two prefix for a special commands
Insert line numbers
a 1 a
b -- insertAtBeginning("eval:lineNr+' '") --> 2 b
c 3 c
Insert if...
a a NO B
b -- insertAtBeginning("eval: if(line.indexOf('b')!=-1) {' FOUND'} else { ' NO B'}") --> b FOUND
c c NO B
Reverse Line
abc cba
def -- replace("eval:line","eval:line.split('').reverse().join('')") --> fed
ghi ihg
Lowercase filenames
Mein Bild.JPG mein bild.jpg
URLAUB-2026.PNG -- replace("eval:line","eval:line.toLowerCase()") --> urlaub-2026.png
Rechnung.PDF rechnung.pdf
Delete every second line
a a
b c
c -- deleteMatchingLine("eval:lineNr%2==0") --> e
d
e
Delete empty lines
a a
b b
c
c -- replaceAllText("\n\n","\n") --> d
d e
f
e
f
combine first and second line to one line
a ab
b cd
c -- insertAtEnd("eval: let res=''; if (lineNr%2==1) res='+++'; else res=''; res") --> ef
d replaceAllText('+++\n',' ')
e
f
use a counter
a 1
b b
c -- replaceInLine("a","eval: 1+counter++") --> c
a 2
d d
a 3
Sort by the second word
Adam Riese Tina Hübsch
Martha Schlau -- sortAsc("eval:(a,b)=>{if(a.split(' ')[1]>b.split(' ')[1]) return 1; else return -1;}") --> Adam Riese
Tina Hübsch Martha Schlau
Sort by line length
Strawberry Kiwi
Kiwi -- sortAsc("eval:(a,b)=>a.length-b.length") --> Pear
Pear Strawberry
Replace a number with its number of stars
1 *
2 **
3 ***
4 -- replace("eval:line","eval:let res='';for(let i=0;i<Number(line);i++) res=res+'*'; res") --> ****
3 ***
2 **
1 *
Build JSON objects from semicolon data
Max;Berlin;42 {"name":"Max","city":"Berlin","age":42}
Ada;London;36 -- replace("eval:line","eval:let p=line.split(';'); JSON --> {"name":"Ada","city":"London","age":36}
Tim;Paris;28 .stringify({name:p[0], city:p[1], age:Number(p[2])})") {"name":"Tim","city":"Paris","age":28}
Find information (info:) and put it in an other place (newPlace:) in the line
abc info:mySecret xxx newPlace: yyy abc info: xxx newPlace:mySecret yyy
info:4911 xxx newPlace: what -- matchAndReplace("(.*?)info:(.*?) (.*?)newPlace:(.*) ", --> info: xxx newPlace:4911 what
xxx info:doit newPlace: now "$1info: $3newPlace:$2 $4") xxx info: newPlace:doit now