【问题标题】:Javascipt Replace all characters with underscore except the first wordJavascript 用下划线替换除第一个单词以外的所有字符
【发布时间】:2021-05-25 02:58:34
【问题描述】:

我想用下划线替换字符串中除第一个单词以外的所有字符,但我的代码用下划线替换了所有字符。

预期结果:你好 ___ __ _________

var regex = /[a-z0-9,.':!?"]/gi;
var str = "Hello I'm an astronaut";
console.log(str.replace(regex, "_"));

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    我会在这里使用拆分和正则表达式方法:

    var str = "Hello I'm an astronaut";
    var first = str.substr(0, str.indexOf(' '));                      // finds first word
    var rest = str.substr(str.indexOf(' ') + 1).replace(/\S/g, "_");  // find other words
    console.log(first + " " + rest);

    【讨论】:

      【解决方案2】:

      虽然可以通过使用正则表达式来实现它

      var regex = /(^\S*\s*)?\S/gm;
      var str = "Hello I'm an astronaut";
      console.log(str.replace(regex, "$1_"));

      【讨论】:

        【解决方案3】:

        var regex = /[a-z0-9,.':!?"]/gi;
        var str = "Hello I'm an astronaut";
        console.log(str.substr(0,str.indexOf(' ')) +str.substr(str.indexOf(' ')).replace(regex, "_"));

        【讨论】:

        • 他领先我 40 秒,用他们的@Tim's
        【解决方案4】:

        另一种方法是对support it 的浏览器使用后视:

        (?<=^\S+\s.*)\S
        
        • (?&lt;= 正面向后看,断言左边是
          • ^\S+\s.* 匹配 1+ 个非空白字符,后跟字符串开头的空白字符
        • ) 近距离观察
        • \S 匹配单个非空白字符

        Regex demo

        var regex = /(?<=^\S+\s.*)\S/g;
        var str = "Hello I'm an astronaut";
        console.log(str.replace(regex, "_"));

        或者对要保留的部分使用捕获组,并将匹配项替换为下划线:

        ^(\S+)|\S
        
        • ^(\S+) 字符串的开头,在group 1 中捕获1+ 个非空白字符(在示例代码中用g1 表示
        • |或者
        • \S 匹配单个非空白字符

        Regex demo

        var regex = /^(\S+)|\S/g;
        var str = "Hello I'm an astronaut";
        console.log(str.replace(regex, (m, g1) => g1 ? g1 : "_"));

        【讨论】:

          猜你喜欢
          • 2022-08-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-20
          相关资源
          最近更新 更多