正则表达式用它的匹配数替换重复的整数

时间:2016-08-10 18:29:03

标签: javascript regex

我正在尝试创建一个压缩算法,该算法将使用字符串"z(#)"替换字符串中至少连续5个的所有重复零。

例如:

"01100000210000000000000001"

"011z(5)21z(15)1"

我已经能够使用以下内容用子字符串替换所有重复的零,但我无法弄清楚如何找到匹配数并将其替换为"z(#)"

string.replace(/(0{5,})/g, "hi");

这可以使用正则表达式吗?

2 个答案:

答案 0 :(得分:3)

这是针对您的示例正则表达式的超级特定,但只是为了演示replacement value parameter of replace will accept a function

"01100000210000000000000001".replace(/0{5,}/g, function(matches) {
   return 'z(' + matches.length + ')';
})

答案 1 :(得分:1)

        String expression = "01100000210000000000000001";
        Pattern pattern = Pattern.compile("(0{5,})");       
        Matcher matcher = pattern.matcher(expression);
        while(matcher.find()) {
            String match =matcher.group();
            expression = expression.replaceFirst(match,"Z("+match.length()+")");            
        }