Как сделать «нечеткий поиск» регулярным выражением?Нечеткое совпадение по регулярному выражению
Например, текст "HP ноутбук" может быть нечетким соответствием для любого из:
xxx hp laptop
hp xxx laptop
laptop xxxxx hp
Как сделать «нечеткий поиск» регулярным выражением?Нечеткое совпадение по регулярному выражению
Например, текст "HP ноутбук" может быть нечетким соответствием для любого из:
xxx hp laptop
hp xxx laptop
laptop xxxxx hp
использование просмотрового-aheads для каждого слова:
(?=.*\bhp\b)(?=.*\blaptop\b).*
\b
означает "краевое слово" , поэтому "bhp"
и "laptops"
не совпадают.
См. live demo.
Взгляд вперед, который имеет форму (?=...)
, утверждает (но не потребляет), что вход соответствует регулярному выражению (точки ...
в этом примере). Поскольку он не потребляет вход, указатель не продвигается, когда он оценивается, поэтому вы можете иметь несколько опережающих перспектив в одной и той же точке.
Прочтите this для более подробного объяснения.
Используйте как можно больше из этих перспектив, поскольку у вас есть слова в вашем поисковом запросе.
Я должен предоставить якорь. –
Мне стыдно признаться, что я никогда не слышал о перспективах в регулярном выражении. Классная вещь. – Amarnasan
awesome .. как я могу переписать это в случае, если строка является переменными? – user1902849
Я бы предложил протестировать /\bhp\b/ig
и /\blaptop\b/ig
отдельно, если сначала проходит, то проверьте второе, это самый простой способ.
Это /(\bhp\b).*(\blaptop\b)|(\blaptop\b).*(\bhp\b)/gi
будет полезно проверить, есть ли в строке также слова «hp» и «laptop», но это не очень гибко.
Необходимо использовать границы слов \b
в другом, чтобы избежать «флешпота» и hpaptop и так далее.
Try '\ л.с \ Ь * \ blaptop \ Ь |.?. \ Blaptop \ б * \ л.с \ b'?. Но, похоже, это выглядит не очень хорошо. –