#javascript #regex
Вопрос:
Это регулярное выражение отлично работает в Chrome и Firefox
let regexp = new RegExp(`^${searchTerm}|(?lt;=\s)${searchTerm}`, 'gi')
но, к сожалению, Safari жалуется
Синтаксическая ошибка: Недопустимое регулярное выражение: недопустимое имя спецификатора группы
Похоже, что Safari не поддерживает поисковый поиск, но как я могу его преобразовать, чтобы получить индексы поискового запроса без пробелов?
let regexp = new RegExp(`^${searchTerm}|(?lt;=\s)${searchTerm}`, 'gi') let matchIndices = [...string.matchAll(regexp)].map(match =gt; match.index); matchIndices.forEach(index =gt; { ... });
Ответ №1:
Вы можете использовать регулярное выражение, например /(^|s)word/gi
, и если группа 1 не соответствует пробелу, соберите индекс соответствия, в противном случае значение индекса соответствия 1:
let searchTerm = "foo" let string = "foo fooo,foo" let regexp = new RegExp(`(^|\s)${searchTerm}`, 'gi') var matchIndices = [], m; while(m = regexp.exec(string)) { if (m[1] === "") { matchIndices.push(m.index) } else { matchIndices.push(m.index 1) } } matchIndices.forEach(index =gt; { console.log(index) });