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

2018-05-01 15:39:33 +08:00
 flowfire

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

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

替换后应该为

测试 6 测试 66 测试 六六六 测试 六六六六 测试 六六六六六
2125 次点击
所在节点    正则表达式
5 条回复
imn1
2018-05-01 15:57:29 +08:00
6{3,}
geelaw
2018-05-01 15:57:35 +08:00
感谢你没有问 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
2018-05-01 16:48:46 +08:00
感觉不能一步到位,只能先转到『六』,再挑出『六』和『六六』换回「 6 」
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('六'))
imn1
2018-05-01 17:01:04 +08:00
看错,原来每个 6 都要替换,#1 pass
正则递归吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/451215

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX