我的输入是多行文字,如下所示:
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中的正则表达式并不是很精通。
答案 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 + ")"; });
答案 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);