【问题标题】:Replace all left spaces with a specific string用特定字符串替换所有左边的空格
【发布时间】:2020-07-10 02:27:29
【问题描述】:

我有以下代码可以用特定的字符串替换左边的空格,但是它没有按我的意愿工作。

console.log('  asdadasdad as asdasd asasd'.replace(/^\s+/, 'x'))

它用 x 改变了所有左边的空格,但它应该用一个 x 改变每个左边的空格。

但我只需要这个输出:

xxasdadasdad as asdasd asasd

我该怎么做?非常感谢。

【问题讨论】:

    标签: javascript regex replace


    【解决方案1】:

    目前您正在用单个 x 字符替换完全匹配,但您需要重复 x 到匹配长度,

    let str = '  asdadasdad as asdasd asasd'
    let replacedStr = str.replace(/^\s+/, (m) => 'x'.repeat(m.length))
    console.log(replacedStr)

    【讨论】:

    • 感谢您的出色解决方案。
    • @Jeremy 总是乐于提供帮助。不要忘记投票并选择您认为对您最有帮助的正确答案:)
    【解决方案2】:

    您可以使用回调函数生成包含x的相同长度的字符串。

    console.log('  asdadasdad as asdasd asasd'.replace(/^\s+/, m => new Array(m.length).fill('x').join('')))

    或者与积极的后视交替(不广泛支持,check here)。

        console.log('  asdadasdad as asdasd asasd'.replace(/(?<=^\s*)\s/g, 'x'))

    【讨论】:

    • 感谢这个很棒的解决方案。
    • 您的#2 链接仅指浏览器是否支持look-behinds。我们可以假设所有支持后视的东西都支持可变长度的后视吗? regex101.com 上的 ECMAScript 引擎支持可变长度的look-behinds,这在 regex 引擎中通常很少见。
    【解决方案3】:

    您可以使用 lambda 函数作为 .replace 的第二个参数:

    const s = '  asdadasdad as asdasd asasd';
    
    var repl = s.replace(/^\s+/, m => m.replace(/\s/g, 'x'));
    
    console.log(repl);

    【讨论】:

      【解决方案4】:

      这肯定会在两行中完成:

        var str ='   asdadasdad as asdasd asasd';   
        console.log(str.trim().padStart(str.length, 'x')); 
      

      【讨论】:

      • 如果您只想更改第一个空格并在末尾留下任何多余的空格,可能需要trimStart()
      【解决方案5】:

      你可以使用

      .replace(/\s/gy, 'x')
      

      这里,字符串开头的每个空格都替换为xg(全局)和y(粘性)修饰符的组合使其在字符串开头匹配,然后连续匹配,直到找不到匹配项。

      JS 演示:

      console.log(
        '  asdadasdad as asdasd asasd'.replace(/\s/gy, 'x')
      )

      【讨论】:

      • sticky 修饰符(伟大的名字)是 Javascript 的正则表达式引擎独有的吗?
      • @CarySwoveland 我不记得任何其他为此使用特定修饰符的正则表达式引擎,但它类似于 PCRE/Onigmo 等中的\G 运算符,当它在开始时使用时正则表达式(在 Ruby 中,s.gsub(/\G\s/, 'x')
      猜你喜欢
      • 1970-01-01
      • 2012-01-31
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多