Javascript:替换替换内部

时间:2012-05-24 01:04:11

标签: javascript regex replace

我的输入是多行文字,如下所示:

a.b.c.d.e (f:g)

我需要把它变成

a.b.c.d.e (a/b/c/d/e/f?g)

请注意,虚线部分(a.b.c.d.e)可以包含不同数量的元素,因此有时它会q.r.s.t,有时会u.v.w.x.y.z,依此类推。我有一个replace()会给我(a.b.c.d.e.f?g),但我需要的是将所有. s转换为/ s。

有没有办法在替换内部进行替换?或者我应该只在字符串上调用replace()两次?

很抱歉,如果这个问题措辞不当,我对javascript中的正则表达式并不是很精通。

3 个答案:

答案 0 :(得分:4)

一种非常疯狂的方式:

var str = "a.b.c.d.e (f:g)";
var re = /([^\s]+)\s\(([^:]+):([^\)]+)\)/;
var newStr = str.replace(re, function(a,b,c,d){ return b + " (" + b.replace(/\./g,"/") + "/" + c + "?" + d + ")"; });

jsfiddle

答案 1 :(得分:2)

您需要一个接一个地将呼叫链接到replace()

var result = source.replace("foo", "bar").replace("oof", "rab");

答案 2 :(得分:1)

更精明的方式:) http://jsfiddle.net/smfPU/

input = "a.b.c.d.e.w.x.y.z (f:g:h)";
output = input.replace(/:/g, "?");
outputparts = output.split("(");
left = outputparts[0];
middle = left.replace(/\./g, "/").trim();
right = outputparts[1];
output = left + "(" + middle + "/" + right;
document.write(output);