GoogleDocs上の文字を一列ずつ取得し、置換を行っている。
その一列の文字列が最初に出てくる所のみを置換したいので、以下のような関数で処理をしている。
body = DocumentApp.openById(documentID).getbody(); old = hogehoge(hoge) replacement = hoge function replaceFirst(body,old,replacement) { var b = old.replace(/[\^$.*+?()[]{}|]/g, '\$&'); var found = body.findText(old.replace(/[\^$.*+?()[]{}|]/g, '\$&')); if (found) { var start = found.getStartOffset(); var end = found.getEndOffsetInclusive(); var text = found.getElement().asText(); var ele = found.getElement().getAttributes(); text.deleteText(start, end); text.insertText(start, replacement); text.setAttributes(ele) } }
やりたいこと
例えば、hoge(hogehoge)のように正規表現で使う文言もfoundで見つかるようにしたい。
###課題
今のままだと、old:hoge(hogehoge)はold.replace(/[^$.*+?()[]{}|]/g, '$&')により、hoge(hogehoge)となってしまい、findTextにマッチしない。
findTextについて
- 正規表現だけど正規表現のルールがかからないようにエスケープしております。
ご確認よろしくお願いいたします。
あなたの回答
tips
プレビュー