首页 > 解决方案 > 正则表达式捕获组的字符串长度 (JavaScript)

问题描述

是否可以在 JavaScript 中获取正则表达式捕获组的字符串长度?我想用星号替换实际密码捕获组的长度(即 $2)

let urlRedacted = url.replace(/mongodb:\/\/(.+):(.+)@(.+)/, 'mongodb://$1:*****@$3');

上面只是用硬编码的五个*****代替密码的实际长度($2)

标签: javascriptregex

解决方案


使用回调函数将第二组放入一个变量中,然后.replace是所有*s 的组:

const url = 'mongodb://foo:bar@baz';

const censor = str => str.replace(/./g, '*');
// could also do
// const censor = str => '*'.repeat(str.length);
let urlRedacted = url.replace(
  /mongodb:\/\/(.+):(.+)@(.+)/,
  (_, g1, g2, g3) => `mongodb://${g1}:${censor(g2)}@${g3}`
);

console.log(urlRedacted);


推荐阅读