正则表达式取代匹配的组内容?

时间:2011-12-06 10:26:05

标签: regex

我有正则表达式:

(a+)(,)(b+)

分析字符串:aaaa,bbb

对我来说,保持小组$1 , $2, $3.

非常重要

我需要一个正则表达式用法(,没有Js,c#等),它会给我这个:

kkkk,ppp

流程:

1) emit group1  , group2  , group3
2) keep the $2 group
3)replace the 'a' to 'k' ( as many as 'a'.count)
3)replace the 'b' to 'p' ( as many as 'b'.count)

修改

我在Js

string.replace(regexp/substr,newstring)没有问题

但我不想要任何循环或类似的东西。

2 个答案:

答案 0 :(得分:3)

试试这个:

str.replace(
   new RegExp("([ab]+)", "g"),  
   // Here, we are passing in a nameless function as the parameter for
   // the "replace" argument of the String Replace method. It uses the $1
   // to refer to the grouping of a or b.
   function($1){
      if ($1.charAt(0) == "a"){
      // replace with k
      return( $1.replace(/./g, "k") );
      } else {
      // replace with p
      return( $1.replace(/./g, "p") );
      }
   }
)

根据自己的需要进行调整。

答案 1 :(得分:2)

正则表达式是一种模式匹配机制。您要求的是模式替换。这可以通过其他语言结构实现,这些结构因语言而异,但不是由正则表达式本身。由于您明确排除任何语言细节,因此您的问题没有答案。

修改

好的,现在您已经编辑了问题并允许特定语言的解决方案。见Ed的回答。