Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.12.2019, 11:54
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Помогите с регуляркой
Здравствуйте. Помогите с регулярукой для поиска. Допустим есть массив со строками:
  • Петров Василий Сергеевич
  • Иванов Василий Петрович
  • Краснов Сергей Петрович
Нужно что бы регулярка совпадала в случае, если есть совпадение в последовательности введенных букв в поиске. То есть если я введу ‘вас’ то получу:
  • Петров Василий Сергеевич
  • Иванов Василий Петрович
Если я введу ‘ив’ то получу:
  • Иванов Василий Петрович
Если ‘пет’, то получу все три результата.
То есть не важно какие символы идут до ключа и после ключа, главное, что в строке есть последовательность введенных букв
Ответить с цитированием
  #2 (permalink)  
Старый 22.12.2019, 13:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от Tipylja
Помогите с регулярукой для поиска.
indexOf
Поиск подстроки

toLowerCase
Изменение регистра
Ответить с цитированием
  #3 (permalink)  
Старый 22.12.2019, 13:27
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Я не стал вдаваться в детали, на деле это поиск через плагин для mongoose в mongoDB, туда нужно передать регулярку, так что нужна именно регулярка
Ответить с цитированием
  #4 (permalink)  
Старый 22.12.2019, 13:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Tipylja,
строки 26, 34, 35.
https://javascript.ru/forum/517444-post11.html
Ответить с цитированием
  #5 (permalink)  
Старый 22.12.2019, 15:22
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Благодарю за ответ, вроде это не совсем то, что нужно, возможно я чуть не так описал задачу - нужно забыть про массив=)) Мне просто нужно что бы регулярка проверяла есть ли в одной строке последовательность букв введенных в поиск. Я очень плох в регулярках, по этому и попросил помощи, если говорить абстрактно, на примере маски, то это должно выглядеть как-то так - **str** - то есть - не важно есть ли символы вначале, какие они и тд, не важно есть ли символы после строки, какие они и т.д. - главное что бы была последовательность букв str. Как-то так
RegExp(`/\D/${options.search.toString()\D}`
Ответить с цитированием
  #6 (permalink)  
Старый 22.12.2019, 15:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Tipylja
вроде это не совсем то, что нужно
нужно что бы регулярка проверяла есть ли в одной строке последовательность букв введенных в поиск
Это
Сообщение от рони
indexOf
Поиск подстроки
как раз и нужно в таком случае.
Ответить с цитированием
  #7 (permalink)  
Старый 22.12.2019, 15:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от Tipylja
Как-то так
RegExp(`/\D/${options.search.toString()\D}`
Сообщение от рони
строки 26, 34, 35.
Ответить с цитированием
  #8 (permalink)  
Старый 22.12.2019, 15:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Tipylja,
RegExp.escape = s => s.replace(/[[\\^$.|?*+()]/gim, "\\$&");
function createReg(str)
{
   return new RegExp(RegExp.escape(str), "gi");
}
alert(createReg("test"));
Ответить с цитированием
  #9 (permalink)  
Старый 22.12.2019, 15:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Tipylja,
const arr = [
"Петров Василий Сергеевич",
"Иванов Василий Петрович",
"Краснов Сергей Петрович"];
RegExp.escape = s => s.replace(/[[\\^$.|?*+()]/gim, "\\$&");
const createReg = search => new RegExp(RegExp.escape(search), "i");
let search = "вас";
let reg = createReg(search);
let arSearch = arr.filter(str => reg.test(str));
console.log(search, arSearch)
Ответить с цитированием
  #10 (permalink)  
Старый 22.12.2019, 15:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Tipylja,
const arr = [
"Петров Василий Сергеевич",
"Иванов Василий Петрович",
"Краснов Сергей Петрович"];

let search = "вас";
let arSearch = arr.filter(str => ~str.toLowerCase().indexOf(search.toLowerCase()));
console.log(search, arSearch)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с регуляркой bms.java Общие вопросы Javascript 5 08.06.2017 12:06
помогите с регуляркой, пожалуйста lvovitch Общие вопросы Javascript 3 11.11.2015 08:24
помогите с регуляркой ast_ross Общие вопросы Javascript 40 01.02.2013 20:08
Помогите разобраться с регуляркой shtormIK Общие вопросы Javascript 6 26.06.2012 20:02
Помогите с регуляркой... alexKniaz AJAX и COMET 0 03.11.2008 01:16