其实我想要的是这么一个效果
如果 文本中含有 3 个以下的数字 6,则不对其进行更改,如果有超过 3 个的,则替换为文字 六
例如: 替换前的文本为
测试 6 测试 66 测试 666 测试 6666 测试 66666
替换后应该为
测试 6 测试 66 测试 六六六 测试 六六六六 测试 六六六六六
1
imn1 2018-05-01 15:57:29 +08:00
6{3,}
|
2
geelaw 2018-05-01 15:57:35 +08:00 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 测试 六六六 测试 六六六六 测试 六六六六六 ``` |
3
songz 2018-05-01 16:48:46 +08:00
感觉不能一步到位,只能先转到『六』,再挑出『六』和『六六』换回「 6 」
|
4
momocraft 2018-05-01 16:54:08 +08:00
看 /6{3,}/ 这部分匹配的长度可以吗?
'测试 6 测试 66 测试 666 测试 6666 测试 66666'.replace(/6{3,}/g, f => new Array(f.length+1).join('六')) |
5
imn1 2018-05-01 17:01:04 +08:00
看错,原来每个 6 都要替换,#1 pass
正则递归吧 |