find() {
		// // Reset the regular expression.
		// this.PATTERN.lastIndex = index

		let matches
		while ((this.maxTries > 0) && (matches = this.PATTERN.exec(this.text)) !== null) {
			let candidate = matches[0]
			const offset = matches.index

			candidate = parsePreCandidate(candidate)

			if (isValidPreCandidate(candidate, offset, this.text)) {
				const match =
					// Try to come up with a valid match given the entire candidate.
					this.parseAndVerify(candidate, offset, this.text)
					// If that failed, try to find an "inner match" -
					// there might be a phone number within this candidate.
					|| this.extractInnerMatch(candidate, offset, this.text)

				if (match) {
					if (this.options.v2) {
						return {
							startsAt: match.startsAt,
							endsAt: match.endsAt,
							number: match.phoneNumber
						}
					} else {
            const { phoneNumber } = match

            const result = {
              startsAt: match.startsAt,
              endsAt: match.endsAt,
              phone: phoneNumber.nationalNumber
            }

            if (phoneNumber.country) {
              /* istanbul ignore if */
              if (USE_NON_GEOGRAPHIC_COUNTRY_CODE && country === '001') {
                result.countryCallingCode = phoneNumber.countryCallingCode
              } else {
                result.country = phoneNumber.country
              }
            } else {
              result.countryCallingCode = phoneNumber.countryCallingCode
            }

            if (phoneNumber.ext) {
              result.ext = phoneNumber.ext
            }

            return result
          }
				}
			}

			this.maxTries--
		}
	}
Attempts to find the next subsequence in the searched sequence on or after {@code searchIndex}
that represents a phone number. Returns the next match, null if none was found.

@param index  the search index to start searching at
@return  the phone number match found, null if none can be found