Este Regex funciona bien en Chrome y Firefox
let regexp = new RegExp(`^${searchTerm}|(?<=\\s)${searchTerm}`, 'gi')pero desafortunadamente Safari se queja
SyntaxError: expresión regular no válida: nombre de especificador de grupo no válido
Parece que Safari no admite el lookbehind, pero ¿cómo puedo transformarlo para obtener los índices del término de búsqueda sin los espacios en blanco?
let regexp = new RegExp(`^${searchTerm}|(?<=\\s)${searchTerm}`, 'gi') let matchIndices = [...string.matchAll(regexp)].map(match => match.index); matchIndices.forEach(index => { ... });Puede usar una expresión regular como /(^|\s)word/gi y si el Grupo 1 no coincide con un espacio en blanco, recopile el índice de coincidencia; de lo contrario, el índice de coincidencia + 1 valor:
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 => { console.log(index) });