Совпадение с частью фамилии (имени ...), с допустимой ошибкой до 2х букв?

Рейтинг: 0Ответов: 1Опубликовано: 06.04.2023

Пример.

Ввожу: питр

Находит: Петров | Петя | Петр | Шпилькин ...

То есть 2 произвольные буквы могут быть другими, а сама подстрока может быть в любом месте слова (начало, середина, конец).

Возможно такое выражение? Заранее благодарен!

Ответы

▲ 1Принят

2 произвольные буквы могут быть другими, а сама подстрока может быть в любом месте слова

Могу предложить такое решение...

const str = 'питр'
const a = ['Петров', 'Петя', 'Петр', 'Шпилькин']
const re = reg(str)
console.log(re)

a.forEach(v => console.log(v, re.test(v)))

function reg(str) {
  const a = []
  const e = '[а-яё]'
  for (let i = 0; i < str.length - 1; i++) {
    for (let j = i + 1; j < str.length; j++) {
      const s = str.split('')
      s[i] = e
      s[j] = e
      a.push(s.join(''))
    }
  }
  return new RegExp(a.join('|'), 'i')
}