15

文字列内の文字を置き換えたい、例えば

下書き [ 2 ]

に:

下書き [ 3 ]

この正規表現は Drafts 3のみを返します:

str.replace(/\[(.+?)\]/g, 3)

事前に助けてくれてありがとう

4

4 に答える 4

21

以下以上のものが必要ですか?

 var num=2 // parse this from drafts [2]
 num++;
 var newstr=str.replace(/\[(.+?)\]/g, "["+num+"]")

または、角かっこは入力ごとに<> {}に変更できますか?

replace-stringの代わりに関数を指定することもできます。

var str = "Drafts [2]";

function replacer(match, p1, p2, p3, offset, string) {
  return p1 + (1+parseInt(p2)) + p3;
}
var newstr=str.replace(/([\[(])(.+?)([\])])/g, replacer);
alert(newstr); // alerts "Drafts [3]"
于 2012-11-06T09:19:21.793 に答える
7

角かっこを実際に一致させる代わりに、ゼロ幅のアサーションを使用します。

編集:Javascriptには後読みがありません。:c

一般的な解決策として、周囲のコンテンツをキャプチャし、後方参照を使用して置換文字列に戻すことができます。

str.replace(/(\[).+?(\])/g, "$13$2")

または、ハードコードされたブラケットを置換に含めることもできます。

于 2012-11-06T09:18:29.957 に答える
5

次のように、ブラケットを置換テキストに追加するだけです。

str.replace(/\[(.+?)\]/g, "["+3+"]")

編集:括弧内の数字で何かをする必要がある場合は、置換テキストの代わりに関数を使用できます:

str.replace(/\[(.+?)\]/g, function(string, first){
  // string is the full result of the regex "[2]"
  //first is the number 2 from "draft [2]"
  return "["+(first++)+"]";
})
于 2012-11-06T09:21:46.913 に答える