Как преобразовать это регулярное выражение с помощью lookbehind, чтобы оно работало в Safari?

#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) });