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.zreplace()を与えるaが(a.b.c.d.e.f?g)ありますが、必要なのは、結果でこれらすべて.の s を/s に変換することです。

置換内で置換を行う方法はありますか? それとも、文字列に対して replace() を 2 回呼び出す必要がありますか?

この質問の表現が不十分な場合は申し訳ありませんが、私は 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 に答える