| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| /** |
| * Regular expression to check for all variants of blu[e]toot[h] with or without |
| * space between the words; for BT when used as an individual word, or as two |
| * individual characters, and for BLE, BlueZ, and Floss when used as an |
| * individual word. Case insensitive matching. |
| */ |
| export const BT_REGEX: RegExp = new RegExp( |
| 'blu[e]?[ ]?toot[h]?|\\bb[ ]?t\\b|\\bble\\b|\\bfloss\\b|\\bbluez\\b', 'i'); |
| |
| /** |
| * Regular expression to check for wifi-related keywords. |
| */ |
| export const WIFI_REGEX: RegExp = |
| buildWordMatcher(['wifi', 'wi-fi', 'internet', 'network', 'hotspot']); |
| |
| /** |
| * Regular expression to check for cellular-related keywords. |
| */ |
| export const CELLULAR_REGEX: RegExp = buildWordMatcher([ |
| '2G', '3G', '4G', '5G', 'LTE', 'UMTS', |
| 'SIM', 'eSIM', 'mmWave', 'mobile', 'APN', 'IMEI', |
| 'IMSI', 'eUICC', 'carrier', 'T.Mobile', 'TMO', 'Verizon', |
| 'VZW', 'AT&T', 'MVNO', 'pin.lock', 'cellular', |
| ]); |
| |
| /** |
| * Regular expression to check for display-related keywords. |
| */ |
| export const DISPLAY_REGEX = buildWordMatcher([ |
| 'display', |
| 'displayport', |
| 'hdmi', |
| 'monitor', |
| 'panel', |
| 'screen', |
| ]); |
| |
| /** |
| * Regular expression to check for USB-related keywords. |
| */ |
| export const USB_REGEX = buildWordMatcher([ |
| 'USB', |
| 'USB-C', |
| 'Type-C', |
| 'TypeC', |
| 'USBC', |
| 'USBTypeC', |
| 'USBPD', |
| 'hub', |
| 'charger', |
| 'dock', |
| ]); |
| |
| /** |
| * Regular expression to check for thunderbolt-related keywords. |
| */ |
| export const THUNDERBOLT_REGEX = buildWordMatcher([ |
| 'Thunderbolt', |
| 'Thunderbolt3', |
| 'Thunderbolt4', |
| 'TBT', |
| 'TBT3', |
| 'TBT4', |
| 'TB3', |
| 'TB4', |
| ]); |
| |
| /** |
| * Regular expression to check for all strings indicating that a user can't |
| * connect to a HID or Audio device. This is also a likely indication of a |
| * Bluetooth related issue. |
| * Sample strings this will match: |
| * "I can't connect the speaker!", |
| * "The keyboard has connection problem." |
| */ |
| export const CANNOT_CONNECT_REGEX: RegExp = new RegExp( |
| '((headphone|keyboard|mouse|speaker)((?!(connect|pair)).*)(connect|pair))' + |
| '|((connect|pair).*(headphone|keyboard|mouse|speaker))', |
| 'i'); |
| |
| /** |
| * Regular expression to check for "tether" or "tethering". Case insensitive |
| * matching. |
| */ |
| export const TETHER_REGEX: RegExp = new RegExp('tether(ing)?', 'i'); |
| |
| /** |
| * Regular expression to check for "Smart (Un)lock" or "Easy (Un)lock" with or |
| * without space between the words. Case insensitive matching. |
| */ |
| export const SMART_LOCK_REGEX: RegExp = |
| new RegExp('(smart|easy)[ ]?(un)?lock', 'i'); |
| |
| /** |
| * Regular expression to check for keywords related to Nearby Share like |
| * "nearby (share)" or "phone (hub)". |
| * Case insensitive matching. |
| */ |
| export const NEARBY_SHARE_REGEX: RegExp = new RegExp('nearby|phone', 'i'); |
| |
| /** |
| * Regular expression to check for keywords related to Fast Pair like |
| * "fast pair". |
| * Case insensitive matching. |
| */ |
| export const FAST_PAIR_REGEX: RegExp = new RegExp('fast[ ]?pair', 'i'); |
| |
| /** |
| * Regular expression to check for Bluetooth device specific keywords. |
| */ |
| export const BT_DEVICE_REGEX = |
| buildWordMatcher(['apple', 'allegro', 'pixelbud', 'microsoft', 'sony']); |
| |
| /** |
| * Builds a RegExp that matches one of the given words. Each word has to match |
| * at word boundary and is not at the end of the tested string. For example, |
| * the word "SIM" would match the string "I have a sim card issue" but not |
| * "I have a simple issue" nor "I have a sim" (because the user might not have |
| * finished typing yet). |
| * @param words The words to match. |
| */ |
| function buildWordMatcher(words: string[]): RegExp { |
| return new RegExp( |
| words.map((word) => '\\b' + word + '\\b[^$]').join('|'), 'i'); |
| } |