Помогите с регуляркой
Здравствуйте. Помогите с регулярукой для поиска. Допустим есть массив со строками:
То есть не важно какие символы идут до ключа и после ключа, главное, что в строке есть последовательность введенных букв:) |
Цитата:
Поиск подстроки toLowerCase Изменение регистра |
Я не стал вдаваться в детали, на деле это поиск через плагин для mongoose в mongoDB, туда нужно передать регулярку, так что нужна именно регулярка
|
|
Благодарю за ответ, вроде это не совсем то, что нужно, возможно я чуть не так описал задачу - нужно забыть про массив=)) Мне просто нужно что бы регулярка проверяла есть ли в одной строке последовательность букв введенных в поиск. Я очень плох в регулярках, по этому и попросил помощи, если говорить абстрактно, на примере маски, то это должно выглядеть как-то так - **str** - то есть - не важно есть ли символы вначале, какие они и тд, не важно есть ли символы после строки, какие они и т.д. - главное что бы была последовательность букв str. Как-то так
RegExp(`/\D/${options.search.toString()\D}` |
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Tipylja,
RegExp.escape = s => s.replace(/[[\\^$.|?*+()]/gim, "\\$&"); function createReg(str) { return new RegExp(RegExp.escape(str), "gi"); } alert(createReg("test")); |
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) |
Tipylja,
const arr = [ "Петров Василий Сергеевич", "Иванов Василий Петрович", "Краснов Сергей Петрович"]; let search = "вас"; let arSearch = arr.filter(str => ~str.toLowerCase().indexOf(search.toLowerCase())); console.log(search, arSearch) |
рони, сам всегда юзал такой способ, но прочитал вот и как-то погрустнел.
|
Aetae,
спасибо за ценную информацию! :thanks: |
Дело в том, что у меня нет тех строк в которых будет происходить поиск - они в БД. Я могу указать или точную строк для поиска, в запросе к БД или регулярное выражение. Если я укажу "Василий", то я получу в ответ обе записи из БД с точным совпадением:
module.exports.personGetAllWithParams = options => Persons.paginate( { $text: { $search: 'Василий' } }, options ); То есть в $search я передал свою строку для поиска внутри бд, при запросе. Так же туда можно передать регулярку - это мне и нужно поидее, что бы я мог искать не по целому слову, а по нескольким символам module.exports.personGetAllWithParams = options => { return Persons.paginate( { $text: { $search: RegExp(`/.[${options.search.toString()}]./`, "i") } }, options ); } вот в $search я передаю RegExp - в него я могу передать ту строку которую ввел пользователь для поиска внутри БД. То есть я не могу тут применить indexOf и другие варианты. |
Цитата:
|
Tipylja, речь оказывается о MongoDB, тогда читать, например тут.
|
Часовой пояс GMT +3, время: 19:42. |