iOSでsafariのみ一部javascriptが実行されない現象についてのメモ。
PCやAndroidでは正常に動作していたjavascriptの実装が、iOSでのみ動作しないケースがあったので記録しておきます。
今回iOSのみ正常動作しなかったコード
//<div class="item">aaa[1234]</div> の1234のみを取得する
document.querySelectorAll('.item')[0].innerText.match(/(?<=\[).*?(?=\])/));
下記に変更すると動作を確認
//<div class="item">aaa[1234]</div> の1234のみを取得する
document.querySelectorAll('.item')[0].innerText.match(/(?=\[).*?(?=\])/));
iOSでは一部の正規表現でjavascriptの実行が停止される
どうもiOSでは肯定後読みの演算子を認識しない模様。
正規表現の肯定後読みの記述を以下のように変更。
肯定先読みの後にマッチ文字を削除。
?<=
↓
?=
var txt = document.querySelectorAll('.item')[0].innerText.match(/(?=\[).*?(?=\])/));
var txt2 = txt.replace( /[/g , "" ) ;
類似のケースがstackoverflowにあり。
Equivalent Regex Unsupported lookbehind assertion IOS Safari
どうやらiOSには正規表現で使用できない記述があるようで、かつエラーにならず途中で処理が落ちるので注意が必要。iOSは実機デバッグがやはり必須。