Apple の脅威の通知と金銭目当てのスパイウェアへの対策について

JavaScript for Automation (JXA)で正規表現

Big Sur / AppleScript Ver 2.7, Monterey / AppleScript Ver 2.8


JavaScript for Automation (JXA)にて正規表現を使って住所の番地の『ー』(長音符)を半角ハイフンに置換しようとしています。

肯定先読み(というのかな?)が構文エラーになってしまいます。

逆の肯定後読みは問題ないようです。

JXAでは使えないないのでしょうか?あるいは違う書き方があるのでしょうか?

(目的自体は別の書き方で解決しています)


var a_Address = "東京都千代田区永田町1ー23ー4 中央センタービル";
a_Address = a_Address.replace(/ー(?=\d)/, "-"); //エラーなし
a_Address = a_Address.replace(/(?<=\d)ー(?=\d)/, "-"); //構文エラー

投稿日 2023/07/02 07:53

返信
スレッドに付いたマーク ベストな回答

投稿日 2023/07/03 10:16

JavaScriptCore.framework 内にある jsc でも同様 (Monterey:NG、Ventura:OK) ですから、Monterey 以前の JavaScript のバグだと思います。多分...。


a.js

var a_Address = "東京都千代田区永田町1ー23ー4 中央センタービル";
a_Address = a_Address.replace(/(?<=[0-9])ー/g, "-");
print(a_Address);


# Ventura

/System/Volumes/Preboot/Cryptexes/OS/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Helpers/jsc a.js


結果

東京都千代田区永田町1-23-4 中央センタービル


# Monterey

/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Helpers/jsc a.js


結果

Exception: SyntaxError: Invalid regular expression: invalid group specifier name
at a.js:2


返信: 5
スレッドに付いたマーク ベストな回答

2023/07/03 10:16 Hiro__S への返信

JavaScriptCore.framework 内にある jsc でも同様 (Monterey:NG、Ventura:OK) ですから、Monterey 以前の JavaScript のバグだと思います。多分...。


a.js

var a_Address = "東京都千代田区永田町1ー23ー4 中央センタービル";
a_Address = a_Address.replace(/(?<=[0-9])ー/g, "-");
print(a_Address);


# Ventura

/System/Volumes/Preboot/Cryptexes/OS/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Helpers/jsc a.js


結果

東京都千代田区永田町1-23-4 中央センタービル


# Monterey

/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Helpers/jsc a.js


結果

Exception: SyntaxError: Invalid regular expression: invalid group specifier name
at a.js:2


2023/07/02 18:19 Naoto_101_795 への返信

Parallels Desktop 18 上の Monterey 12.6.6 で試したところ、肯定先読みと否定先読みは大丈夫ですが、肯定後読みと否定後読みが構文エラーとなります。バグでしょうね。ちなみに Parallels Desktop 18 上の Ventura 13.4 では期待通りに動きます。

JavaScript for Automation (JXA)で正規表現

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple ID を使ってご参加ください。