UNPKG

react-bootstrap-typeahead

Version:
38 lines (32 loc) 1.17 kB
import escapeStringRegexp from 'escape-string-regexp'; import stripDiacritics from './stripDiacritics'; var CASE_INSENSITIVE = 'i'; var COMBINING_MARKS = /[\u0300-\u036F]/; export default function getMatchBounds(subject, str) { var search = new RegExp(escapeStringRegexp(stripDiacritics(str)), CASE_INSENSITIVE); var matches = search.exec(stripDiacritics(subject)); if (!matches) { return null; } var start = matches.index; var matchLength = matches[0].length; // Account for combining marks, which changes the indices. if (COMBINING_MARKS.test(subject)) { // Starting at the beginning of the subject string, check for the number of // combining marks and increment the start index whenever one is found. for (var ii = 0; ii <= start; ii++) { if (COMBINING_MARKS.test(subject[ii])) { start += 1; } } // Similarly, increment the length of the match string if it contains a // combining mark. for (var _ii = start; _ii <= start + matchLength; _ii++) { if (COMBINING_MARKS.test(subject[_ii])) { matchLength += 1; } } } return { end: start + matchLength, start: start }; }