【问题标题】:JavaScript replace first 5 characters with *JavaScript 将前 5 个字符替换为 *
【发布时间】:2019-08-30 18:14:33
【问题描述】:

我需要 Javascript 正则表达式来替换前 5 个字符。下面是几个例子。第一行是输入,第二行是预期输出。您能否告诉我如何实现这一目标?

我已经尝试过以下操作。但如果输入小于 4,它们都不起作用。

.{5} to ***** and ^\d{5} to *****

例子

123456789
XXXXX6789

123
XXX

123456
XXXXX6

1
X

12345
XXXXX

【问题讨论】:

  • 对于最新的 Chrome 和 Node 版本,.replace(/(?<=^\d{0,4})\d/g, '*')

标签: javascript jquery regex


【解决方案1】:

您可以在.replace() 中使用回调函数或 lambda:

var arr = ['123456789',
'123',
'123456',
'1',
'12345'];

arr.forEach(el => console.log(el, '::', el.replace(/^\d{1,5}/, 
            m => m.replace(/\d/g, 'X'))))

【讨论】:

  • 附注:- repeat 方法存在于 JS 中用于此类情况
【解决方案2】:

您的第一个正则表达式需要稍作调整,这应该可以工作。

let reg = /.{1,5}/
let string = '123456789';
let string2 = '123';
console.log(string.replace(reg, (m) => "X".repeat(m.length)));
console.log(string2.replace(reg, (m) => "X".repeat(m.length))); 

【讨论】:

    【解决方案3】:

    如果您不是在寻找正则表达式解决方案,那么您也可以尝试将其作为一个选项。基于 substring() 方法的替代方法

    function replace_String(string, numberofchar,chartoreplace) {
    
      return string.substring(0, numberofchar).split("").map(ele => ele = chartoreplace).join("").concat(string.substring(numberofchar, string.length))
    
    }
    
    
    console.log(replace_String("123456789", 5,"X"))
    console.log(replace_String("1", 1,"*"))

    【讨论】:

      【解决方案4】:

      您可以通过多种方式做到这一点。一个是两个替换语句

      const hideFive = str => str.replace(/^\d{1,5}/, x => x.replace(/./g, '*'))
      
      var tests = ["1", "12", "123", "1234", "12345", "123456", "1234567", "12345678", "1234567890"]
      tests.forEach( val => console.log(val, '=', hideFive(val)) )

      没有粗箭头

      function hideFive (str) {
        return str.replace(/^\d{1,5}/, function(x) {
          return x.replace(/./g, '*')
        })
      }
      
      var tests = ["1", "12", "123", "1234", "12345", "123456", "1234567", "12345678", "1234567890"]
      tests.forEach( function(val) {
        console.log(val, '=', hideFive(val))
      })

      【讨论】:

        【解决方案5】:

        您可以替换第一个字符并取出字符串的剩余部分。

        const replaceFirst5 = s => '*'.repeat(Math.min(5, s.length)) + s.slice(5);
        
        console.log(replaceFirst5("123456789"));
        console.log(replaceFirst5("123"));

        【讨论】:

          【解决方案6】:

          您可以使用replacerepeat

           ^.{1,5}
          
          • ^ - 字符串开始
          • .{1,5} - 匹配除新行以外的任何内容,至少 1 次,最多 5 次

          let replaceFirst5 = (str) =>{
            return str.replace(/^.{1,5}/, m=> "X".repeat(m.length))
          }
          
          console.log(replaceFirst5("123456789"))
          console.log(replaceFirst5("123"))

          【讨论】:

            【解决方案7】:

            假设这些数字被包装在一个名为“numbers”的类中

            jQuery 代码

            $.each('.numbers',function(){
            let num = $(this).text();
            var j="";
              for(let i =0;i<num.length;i++){
              if( i == 5){
              break;
              }
             j+="*";
              }
              var res = str.replace(num.substring(0, 5),j);
              document.getElementById("demo").innerHTML = res;
                });
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-05-30
              • 2012-06-25
              • 2017-01-31
              • 2016-02-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多