質問: 'aaaaa[0][bbbbb][0][ccccc][0][ddddd]'; // ゴリ押し方法 str.replace(/\[[0-9]+\]/, '[1]').replace(/aaaaa\[[0-9]+\]/, '[0]'); ```
回答: `aaaaa[0]` を `aaaaa[1]` に置換するだけなら特別な正規表現は何も要らないと思うのですが...。 * 一括置換するなら、`g` フラグを付ける * `[]` をエスケープする 「スマートな正規表現が見つかりません。」とありますが、正規表現の学習のどれほどの時間をかけて、どの程度は理解していますか。 **(2017/04/29 20:23追記)** 要件を勘違いしていたので、上記アドバイスは忘れてください。 ただ、やりたい要件を書くだけでなく、あなたが「分かっている範囲」と「分からない範囲」を具体化する事も大切だと思います。 どの程度の知識があるのかわからないので、何をアドバイスしていいのか分かりません...。 ### String.prototype.replace とりあえず、下記コードで要件は満たせます。 ``` var str = 'aaaaa[0][bbbbb][0][ccccc][0][ddddd]'; var str2 = str.replace(/(aaaaa\[0\])([\s\S]*\[0\])/, function (string, capture1, capture2) { return capture1 + capture2.replace(/\[0(?=\])/g, '[1'); }); console.log(str2); // "aaaaa[0][bbbbb][1][ccccc][1][ddddd]" ``` ### String.prototype.slice > > 先頭は'aaaaa[0]'で始まり、固定 > > > 上記条件を踏まえると、先頭から8文字を読み飛ばすだけでも要件は満たせますね。 ``` var str = 'aaaaa[0][bbbbb][0][ccccc][0][ddddd]'; var str2 = 'aaaaa[0]' + str.slice(8).replace(/\[0(?=\])/g, '[1'); console.log(str2); // "aaaaa[0][bbbbb][1][ccccc][1][ddddd]" ``` ### String.prototype.indexOf 汎用性を上げたコード。 ``` var str = 'hogeaaaaa[0][bbbbb][0][ccccc][0][ddddd]', a = 'aaaaa[0]', index = str.indexOf(a) + a.length, result = str.slice(0, index) + str.slice(index); console.log(result); // "hogeaaaaa[0][bbbbb][0][ccccc][0][ddddd]" ``` Re: tatsuno さん