前提・実現したいこと
GASにて正規表現の(?<!pattern)
を使用したいのですが、エラーが発生します。
実現したいことは、
- 直前に半角英数字が入らない
- 直後に
_
がある
の2つが成立する文字列(今回はaaa
)のみの置き換えです。
(aaa_
や_aaa_
をAAA_
や_AAA_
にしたい。_baaa_
は無視)
aaa
の文字列のみを置き換えたいと思い、初めて使用する位置指定子でaaa
のみにマッチするはずの正規表現を書いてみましたが、うまくいきません。
発生している問題・エラーメッセージ
js
1SyntaxError: Invalid quantifier ? 2 3// 以下のソースコード 4// var replaced = str.replace(/(?<![a-zA-Z0-9])aaa(?=_)/g, 'AAA'); 5// で発生します。
該当のソースコード
js
1var str = "aaa_baaa_aaa_ccc"; 2 3var replaced = str.replace(/(?<![a-zA-Z0-9])aaa(?=_)/g, 'AAA'); 4 5// AAA_baaa_AAA_cccとしたい 6Logger.log(replaced);
試したこと
正規表現が誤っているのだと思い、正規表現チェッカーや、Chromeのコンソールでも試しましたが、それらでは望み通りの結果が返ってきました。
また(?=pattern)
のみではエラーは発生せず、(?<!pattern)
を使用した途端エラーが発生します。
js
1 var str = "abca"; 2 3 var rep = str.match(/a(?!bc)/); // null 4 var rep = str.match(/(?<!ab)c/); // error 5 var rep = str.match(/a(?=bc)/); // [a] 6 var rep = str.match(/(?<=ab)c/); // error
それを踏まえ、上記のより単純な正規表現で全ての位置指定子を試してみたところ、(?<!pattern)
と(?<=pattern)
の後読み2つでエラーが発生しました。
それらしいドキュメントを見つけることはできなかったのですが、GASではこれらの後読みは使用できないのでしょうか?
どなたかご教示頂けますと幸いです。よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
GASのライブラリは使用していません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。