ネガティブな先読み
正規表現には、先読み部分をキャプチャせずに正規表現の文字列と一致する負の先読みと呼ばれる構造があります。
正規表現は次のように記述する必要があります。
/android(?!.*mobile)/i
これは、大文字と小文字が無視された単語mobileが後に続く単語androidを含むすべての文字列に一致します。これは、通話を削除できることも意味します。toLowerCase
追加:ネガティブルックビハインド
androidという単語が含まれているがモバイルがない(前または後の)文字列のみを一致させる必要がある場合は、負の先読みと後読みの組み合わせで問題ありません。
/(?<!mobile.*)android(?!.*mobile)/i
しかし、問題は、Javascriptがネガティブルックビハインドをサポートしていないことです。したがって、その状況を判断するのに役立つ別のトリックを採用する必要があります。
以下が最も興味深い(そして最後の1つが役立つ)と思われるいくつかの可能性があります。
後で失敗する一致する負の文字列を置き換えます。
var nav = navigator.userAgent.replace(/mobile.*android/, "fail" );
return /android(?!.*mobile)/i.test(nav);
2つの先読みを使用します。1つは通常の文字列に、もう1つは逆にされた正規表現を持ちながら、次のようになります。
var nav = navigator.userAgent;
var after = /android(?!.*mobile)/i.test(nav);
var before = /diordna(?!.*elibom)/i.test(nav.split("").reverse().join(""));
return before && after;
シンプルさが鍵となります。2つの単純な正規表現でもうまくいきます。
var nav = navigator.userAgent;
return /android/i.test(nav) && !/mobile/i.test(nav);
注:コードが実際のコードであるかどうかはわかりません。実際のコードである場合は、 switch(true)
ステートメントの使用を再検討し、単に。に置き換えること
return is_not_tablet_bool;
を強くお勧めします。