راکت
حل شده

RegEx برای فیلتر کردن آرایه

9 پاسخ

سلام خدمت دوستان عزیز
من میخوام RegEx ای بسازم که بتونم آرایه هامو فیلتر کنم فرض کنید

[1 , 2 , 3 , 4 ] رو داریم
[1 , 2 , 3 , 1 ] رو هم داریم

مثلا regex ای باشه که بتونیم توش بگیم 2 تا عنصر اول 1 و 2 باشه بقیه هرچی بود
یعنی هر دو آرایه ی بالا رو برگردونه
ممنون

Parsa Hassani
Parsa Hassani
@f4ran
ثبت پرسش جدید

پاسخ‌ها

9
میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

بهترین پاسخ

با توجه به توضیحاتی که دادم، یعنی ابتدا به کمک توابع slice یا splice، بخش های موردنظرت از آرایه رو جدا میکنی.سپس عناصر رو با تابع join بهم وصل کنی.
بعدش عبارت باقاعده ای رو براش بسازی و به کمک تابع test اون رو ارزیابی کنی.
اگر ارزیابی مثبت بود، اون آرایه رو قبول کن وگرنه اون رو رَد کن.

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

میتونی ابتدا همه ی عناصر آرایه رو با تابع join بهم وصل کنی.
سپس عبارت باقاعده ای رو براش بسازی و به کمک تابع test اون رو ارزیابی کنی.
اگر ارزیابی مثبت بود، اون آرایه رو قبول کن وگرنه اون رو رَد کن.

Parsa Hassani
Parsa Hassani
@f4ran

تخصص: برنامه نویس وب ، موبایل اپ و میکروکامپیوتر ها

@milad
مرسی میلاد جان واسه جوابت
من میخوام این اطلاعات رو از دیتابیس دریافت کنم برای همین ترجیح میدم فیلتر شده دریافت کنم که بهینه تر باشه
اگه به جایی برسه که مجبور شم همه داده ها رو بگیرم بعد پردازش انجام بدم حتما از روشت استفاده میکنم ممنون

شاید پاسخ شما همین‌جا باشد

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

سوالت رو دقیقتر بگی شاید جواب دیگه ای بتونم بدم.

وقتی شما اسم عبارات باقاعده رو آوردی و در خصوص عناصر آرایه گفتی، یعنی با کل عناصر آرایه سرُ کار داریم.
عبارات باقاعده اینجوری هستند، یعنی یک عبارت داریم میخوایم ببینیم قاعده ما درونش صادق هستش یا نه. وقتی شما واسه یک آرایه این رو مطرح می کنی، فکر می کنم معنیش اینه که با کل عناصر آرایه باید روبرو بشیم. اینکه یک join در ابتدا صورت میگیره برای بوجود آوردن ارتباط بین عناصر هستش.
ضمنا فکر نمی کنم عملیات خاصی محسوب بشه، پیچیدگیش خطی هستش، به طول آرایه.

میلاد-م
میلاد-م
@milad

تخصص: توسعه‌دهنده رابط کاربری - Front-End

خواهش میکنم، زنده باشی

اگر هم منظورت اینه که فقط با چند عنصر سروکار داریم، مثلا عناصر اول/دوم/سوم/چهارم، میتونی از دیگر توابع آرایه واسه گزینش این موارد استفاده کنی. از جمله: slice یا splice
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

(حالا ببینیم بقیه دوستان هم که نظر دادن، نظرشون چیه. منم میخونم همراه با شما)

سید حسین رضوی
سید حسین رضوی
@hossein.r.1442

تخصص: برنامه نویس وب و طراح رابط کاربری

من حقیقت درست متوجه نشدم شما دنبال چی هستید

Parsa Hassani
Parsa Hassani
@f4ran

تخصص: برنامه نویس وب ، موبایل اپ و میکروکامپیوتر ها

@milad
@hossein.r.1442
خب مثل اینکه من سوالم رو بد پرسیدم
ببینین من یه سری داکیومنت توی دیتابیس mongo دارم
این ها یکی از مقادیرشون به صورت آرایه ذخیره میشه تا همینجا یه مثال بزنم
مدل ما :
name : پارسا
cart: [ "هاست" , "دامنه" , "سرور" ]

name:میلاد
cart:["هاست","دامنه","دامنه","لایسنس"]

مثلا تو 1000 تا نمونه این دو نمونه کارتشون با هاست و دامین شروع میشه
مثلا میخوام یک regex برای اونایی که المنت اولشون هاست هست المنت دومشون دامنه هست بنویسم سومی هم هرچی بود

let carts = User.find({cart : ["هاست", "دامنه" , "هرچی"]})

توجه داشته باشین ترتیب برام مهمه یعنی حتما اولی هاست دومی دامنه است ، تکرار هم داریم

ممنون از توجه تون

Mohammad Amin Mokhtari
Mohammad Amin Mokhtari
@amin.mokhtari94

تخصص: برنامه نویس

سلام
این کد کمکتون میکنه:

const regex = /\[\s*"p1"\s*,"p2"\s*,*(.*)\]/gm;
const str = `[  "p1" ,"p2" , "anything"]`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }

    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}
سید حسین رضوی
سید حسین رضوی
@hossein.r.1442

تخصص: برنامه نویس وب و طراح رابط کاربری

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام