flowfire

话说被替换的文本怎么获取正则里的重复次数?

  •  
  •   flowfire · May 1, 2018 · 2714 views
    This topic created in 2965 days ago, the information mentioned may be changed or developed.

    其实我想要的是这么一个效果
    如果 文本中含有 3 个以下的数字 6,则不对其进行更改,如果有超过 3 个的,则替换为文字 六
    例如: 替换前的文本为

    测试 6 测试 66 测试 666 测试 6666 测试 66666
    

    替换后应该为

    测试 6 测试 66 测试 六六六 测试 六六六六 测试 六六六六六
    
    5 replies    2018-05-01 17:01:04 +08:00
    imn1
        1
    imn1  
       May 1, 2018
    6{3,}
    geelaw
        2
    geelaw  
       May 1, 2018   ❤️ 1
    感谢你没有问 XY 问题。换一种思路,只匹配连续多个 6 里面的 6,替换为 六 即可。以 PowerShell (.NET) 为例

    ```PowerShell
    PS C:\> $r = '6(?=66)|(?<=6)6(?=6)|(?<=66)6'
    PS C:\> $r = [regex]::new($r)
    PS C:\> $text = '测试 6 测试 66 测试 666 测试 6666 测试 66666'
    PS C:\> $replacement = '六'
    PS C:\> $r.Replace($text, $replacement)
    测试 6 测试 66 测试 六六六 测试 六六六六 测试 六六六六六
    ```
    songz
        3
    songz  
       May 1, 2018
    感觉不能一步到位,只能先转到『六』,再挑出『六』和『六六』换回「 6 」
    momocraft
        4
    momocraft  
       May 1, 2018
    看 /6{3,}/ 这部分匹配的长度可以吗?

    '测试 6 测试 66 测试 666 测试 6666 测试 66666'.replace(/6{3,}/g, f => new Array(f.length+1).join('六'))
    imn1
        5
    imn1  
       May 1, 2018
    看错,原来每个 6 都要替换,#1 pass
    正则递归吧
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2748 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 11:56 · PVG 19:56 · LAX 04:56 · JFK 07:56
    ♥ Do have faith in what you're doing.