Как отловить пересекающиеся матчи в регулярных выражениях?

106
09 ноября 2019, 15:20

Допустим, есть строка testestest. Если применить к ней регулярное выражение /(test)/g, то результат будет таков: testestest. Как сделать так, чтобы регулярное выражение захватывало и тот промежуточный testestest? Как это правильно называется?

Answer 1

Воспользуйтесь regexp.exec(str)

Если флаг g есть, то вызов regexp.exec возвращает первое совпадение и запоминает его позицию в свойстве regexp.lastIndex. Последующий поиск он начнёт уже с этой позиции. Если совпадений не найдено, то сбрасывает regexp.lastIndex в ноль.

let s = "testestest"; 
let r = /test/g; 
let m; 
while (m = r.exec(s)) { 
  console.log("Match: " + m[0] + ", pos: " + m.index); 
  r.lastIndex = m.index+1; 
}

learn.javascript.ru: Методы RegExp и String

Answer 2

var res = [] 
"testestest".replace(/(?=(test))/g, (m, g) => res.push(g)) 
console.log(res)

READ ALSO
Разница между двумя разными датами

Разница между двумя разными датами

Мое задание в университете требует, чтобы мы нашли сколько дней прошло от текущей даты до заданного пользователем дня рожденияПреподаватель...

141
Вызов стандартного окна валидации

Вызов стандартного окна валидации

Можно-ли с помощью JS,искусственно вызвать в поле вот такое окно:

119
Node.JS минификаторы

Node.JS минификаторы

Рендерю все страницы для юзеров на сервере, так вот мне нужно минифицировать все html, css, и jsНо есть проблема, некоторые html содержат в себе так-же...

103