1
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?

halfer
  • 19,824
  • 17
  • 99
  • 186
Kifsif
  • 3,477
  • 10
  • 36
  • 45

2 Answers2

5

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(' ');
0stone0
  • 34,288
  • 4
  • 39
  • 64
  • I'm currently trying to understand Regex, what does `B` on start of the expression means? – aca Jul 28 '22 at 12:29
  • 2
    ["`\B` matches the empty string not at the beginning or end of a word"](https://stackoverflow.com/questions/6664151/difference-between-b-and-b-in-regex) – 0stone0 Jul 28 '22 at 12:30
0

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; }
Mr. Polywhirl
  • 42,981
  • 12
  • 84
  • 132