アプリ版:「スタンプのみでお礼する」機能のリリースについて

正規表現のグループ化を使用して、文字列の変換をしたいと思っているのですが、方法がわからないため質問させていただきました。

やりたいこと:
文字列aaaとbbbの間にある文字Cを全てZに変換する
ただし、文字列aaaは文頭、bbbは文末で文字Cが含まれないこともある

例:
aaaCkCogfkjhCgoCbbb => 変換 => aaaZkZogfkjhZgoZbbb

1文字だけであれば
(aaa.*)C(.*bbb) で $1Z$2と思うのですがaaaとbbb間に複数Cがある場合に判別する方法がわかりません。

javascriptでの変換を考えています。

よろしくお願いいたします。

A 回答 (4件)

結局は2段階でやるしかないと思います



var str="hogehogeaaaCkCogfkjhCgoCbbbfugafuga";
var str=str.replace(/^(.*?aaa)(.+)(bbb.*)$/m,function(r0,r1,r2,r3){
return r1+r2.replace(/C/g,"Z")+r3;
});
console.log(str);
    • good
    • 0

もしくは



var str="hogehogeaaaCkCogfkjhCgoCbbbfugafuga";
var str=str.replace(/^(.*?aaa)(.+)(bbb.*)$/m,function(){
var r=arguments;
return r[1]+r[2].replace(/C/g,"Z")+r[3];
});
console.log(str);
    • good
    • 0

深く試していないのだけれど


(効率は悪いと思う)

let str ='aaaCkCogfkjhCgoCbbb';
let reg = /^(aaa[^C]*?)C(?=(.*bbb)$)/;
let ary = [ ];

while (ary = reg.exec (str))
str = ary[1] + 'Z' + ary[2];

console.log (str);
    • good
    • 0

なんで毎度毎度投稿してから気づくのだろう?


(最速だべ?)

let str ='aaaCkCogfkjhCgoCbbb';
let rst;

if (/^aaa.*bbb$/.test (str))
rst = str.split (/C/).join ('Z')


console.log (rst);
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!