微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式捕获组JavaScript的字符串长度

如何解决正则表达式捕获组JavaScript的字符串长度

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

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

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

解决方法

使用回调函数将第二个组添加到变量中,然后.replace将所有*个组包含在该变量中:

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);

,

如果可以使用后视,则不需要 lambda:

const url = 'mongodb://foo:bar@baz';
let urlRedacted = url.replace(/(?<=mongodb:\/\/.+:[^@]*)[^@]/g,'*');
console.log(urlRedacted); // mongodb://foo:***@baz

proof

说明

--------------------------------------------------------------------------------
  (?<=                     look behind to see if there is:
--------------------------------------------------------------------------------
    mongodb:                 'mongodb:'
--------------------------------------------------------------------------------
    \/                       '/'
--------------------------------------------------------------------------------
    \/                       '/'
--------------------------------------------------------------------------------
    .+                       any character except \n (1 or more times
                             (matching the most amount possible))
--------------------------------------------------------------------------------
    :                        ':'
--------------------------------------------------------------------------------
    [^@]*                    any character except: '@' (0 or more
                             times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  )                        end of look-behind
--------------------------------------------------------------------------------
  [^@]                     any character except: '@'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?