جاوااسکریپت - چگونه از عبارت باقاعده (regex) برای یافتن تمام جملههایی که ممکن است شامل یک فهرست از کلمات توقف باشند استفاده کنیم؟
هدف یافتن تمام جملاتی است که ممکن است یک فهرست از کلمات توقف را بین عبارت to_match مانند اینها داشته باشند:
- آرزو کردن
- آرزو کن
- یک آرزو کن
let stopword: string[]= ["of", "the", "a"];
let to_match : string = "make wish";
let text: string = "make wish wish make a wish wish wish make the a wish make";
من فقط میتوانم با استفاده از این عبارت منظم، make wish را مطابق کنم:
const regex = new RegExp(`(?:\\b)$to_match(?:\\b)`, "gi");
من تعجب میکنم که آیا امکان انجام کاری شبیه به این وجود دارد
let to_match_splitted: string[] = to_match.split(" ");
const regex = `(?:\\b)${to_match_splitted[0]}\s(${any(stopword)}?)+\s${to_match_splited[1]}(?:\\b)`;
با any(stopword) چیزی است که با هر کلمهی توقف در فهرست کلمات توقف مطابقت داشته باشد.
و داشتن یک عبارت منظم (regex) که کار کند هرچه طول to_match_splitted باشد با یک یا چند کلمه توقف بین هر رشته در لیست.
پاسخ شماره ۱
شما میتوانید یک عبارت منظم مانند
/\bmake(?:\s+(?:of|the|a))*\s+wish\b/gi
دموی عبارت منظم را ببینید. جزئیات
\b- مرز کلمهmake- یک کلمه(?:\s+(?:of|the|a))*- صفر یا چند تکرار\s+- يک يا چند فضای خالی
(?:of|the|a)- یاof،theیاa(ممکن است بخواهید ازan?نیز استفاده کنید تاanرا هم مطابقت دهد)
\s+ - يک يا چند فضای خالیwish - یک کلمه wish\b - مرز کلمهدر کد خود، میتوانید از
let stopword: string[]= ["of", "the", "a"];
let to_match : string = "make wish";
let text: string = "make wish wish make a wish wish wish make the a wish make";
const regex = new RegExp(`\\b${to_match.split(/\s+/).join("(?:\\s+(?:" + stopword.join("|") + "))*\\s+")}\\b`, "gi");
console.log(text.match(regex));نسخه نمایشی آنلاین را ببینید
