text = "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,";
substitute_with = "_";
const regex = '\B[A-Za-z]';
// const regex = '\B\w';
// const regex = '(\w{1})\w*';
var result = text.replaceAll(regex, substitute_with);
I would like to substitute with underscore all letters except the first in each word.
What can I try next?
Use the g (global) flag with replace():
const text = "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,";
const substitute_with = "_";
const regex = /\B[A-Za-z]/g;
var result = text.replace(regex, substitute_with);
console.log(result);
L____ I____ h__ b___ t__ i_______'s s_______ d____ t___ e___ s____ t__ 1500_,
Of course, this can also be done without regex using split(), substring(), repeat() and join():
const result = text.split(' ')
.map(w => w.substring(0, 1) + substitute_with.repeat(w.length - 1))
.join(' ');
You could match all words first, then separate the head and tail of the word and replace all the letters in the tail porition.
const text = "Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,";
const result = text.replace(
/\b\S+\b/gi, // For each word
(g0) => g0.replace(
/\b([a-z])(.+)\b/i, // Grab the head and tail
(_g0, _g1, _g2) =>
`${_g1}${_g2.replace(/[a-z]/gi, '_')}` // Keep head, replace all others with '_'
)
);
console.log(text);
console.log(result);
.as-console-wrapper { top: 0; max-height: 100% !important; }