1

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

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 中的正则表达式并不十分精通。

4

3 回答 3

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

于 2012-05-24T01:16:30.777 回答
3

您需要将呼叫replace()一个接一个地链接起来。

var result = source.replace("foo", "bar").replace("oof", "rab");
于 2012-05-24T01:15:22.257 回答
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);
于 2012-05-24T01:21:40.257 回答