Breaking Bad - ize any string (compression) The TV series &quot;Breaking Bad&quot; replaced the letters Br and Ba with a periodic-table like representation, printing [Br35]eaking [Ba56]d.
Create a program that takes a string input, does a replacement and prints an output.
The replacement shall subsidize any substring that matches an element symbol with the notation demonstrated in [Br35]eaking [Ba56]d. That is, add the atomic number to the element symbol and enclose in square brackets.
All elements start with a capital letter and consist of either one or two letters. The highest element to be considered is Og118. From wikipedia:

 1    H, 2    He, 3   Li, 4   Be, 5   B, 6    C, 7    N, 8    O, 9    F, 10   Ne, 11  Na, 12  Mg, 13  Al, 14  Si, 15  P, 16   S, 17   Cl, 18  Ar, 19  K, 20   Ca, 21  Sc, 22  Ti, 23  V, 24   Cr, 25  Mn, 26  Fe, 27  Co, 28  Ni, 29  Cu, 30  Zn, 31  Ga, 32  Ge, 33  As, 34  Se, 35  Br, 36  Kr, 37  Rb, 38  Sr, 39  Y, 40   Zr, 41  Nb, 42  Mo, 43  Tc, 44  Ru, 45  Rh, 46  Pd, 47  Ag, 48  Cd, 49  In, 50  Sn, 51  Sb, 52  Te, 53  I, 54   Xe, 55  Cs, 56  Ba, 57  La, 58  Ce, 59  Pr, 60  Nd, 61  Pm, 62  Sm, 63  Eu, 64  Gd, 65  Tb, 66  Dy, 67  Ho, 68  Er, 69  Tm, 70  Yb, 71  Lu, 72  Hf, 73  Ta, 74  W, 75   Re, 76  Os, 77  Ir, 78  Pt, 79  Au, 80  Hg, 81  Tl, 82  Pb, 83  Bi, 84  Po, 85  At, 86  Rn, 87  Fr, 88  Ra, 89  Ac, 90  Th, 91  Pa, 92  U, 93   Np, 94  Pu, 95  Am, 96  Cm, 97  Bk, 98  Cf, 99  Es, 100 Fm, 101 Md, 102 No, 103 Lr, 104 Rf, 105 Db, 106 Sg, 107 Bh, 108 Hs, 109 Mt, 110 Ds, 111 Rg, 112 Cn, 113 Nh, 114 Fl, 115 Mc, 116 Lv, 117 Ts, 118 Og

Additional rules:

As this challenge is about compression as much as about code golf, so you have to provide the element list yourself. You must not use any build in periodic tables provided by our language.
Work case-sensitive. That means &quot;Breaking Bad&quot; has 2 replacements, &quot;Breaking bad&quot; has one. The input can be arbitrary and won't always follow English grammar. fOoBar shall become f[O8]o[Ba56]r.
Search greedy, [He] takes precedence over [H].

Shortest code in bytes wins.
JavaScript (ES6), 327 bytes
s=&gt;s.replace(RegExp([...a=&quot;HHeLiBeBCNOFNeNaMgAlSiPSClArKCaScTiVCrMnFeCoNiCuZnGaGeAsSeBrKrRbSrYZrNbMoTcRuRhPdAgCdInSnSbTeIXeCsBaLaCePrNdPmSmEuGdTbDyHoErTmYbLuHfTaWReOsIrPtAuHgTlPbBiPoAtRnFrRaAcThPaUNpPuAmCmBkCfEsFmMdNoLrRfDbSgBhHsMtDsRgCnNhFlMcLvTsOg&quot;.match(/.[a-z]?/g)].sort(s=&gt;-!!s[1]).join`|`,'g'),s=&gt;`[${s+-~a.indexOf(s)}]`)

Try it online!
How?
The data string consists of all element symbols concatenated together, from lowest to highest atomic number.
&quot;HHeLiBeBCNOFNeNaMg...LvTsOg&quot;

We split it into a list a[] of 118 entries with the following regular expression:
 +------&gt; any character (always a capital letter)
 |   +--&gt; optionally followed by a letter in lower case
 | __|_
 |/    \
/.[a-z]?/g

We create a copy of a[], put all single-character elements at the end of the list and join with pipes:
[...a].sort(s =&gt; -!!s[1]).join('|')

Which gives:
&quot;Og|Ts|Lv|Mc|Fl|Nh|...|He|H|B|C|N|O|F|P|S|K|V|Y|I|W|U&quot;

We turn this string into a regular expression and apply it to the input string. Each matched sub-string s is replaced with the pattern:
`[${s + -~a.indexOf(s)}]`