سؤال

بناء على هذه الإجابة

تعبيرات منتظمة: هل هناك ومشغل؟

جربت ما يلي http://regexpal.com/ ولكن لم يتمكن من العمل. ما الذي أفتقده؟ هل جافا سكريبت لا تدعمه؟

Regex: (?=foo)(?=baz)

سلسلة: foo,bar,baz

هل كانت مفيدة؟

المحلول

من المستحيل على كليهما (?=foo) و (?=baz) لمطابقة في نفس الوقت. سيتطلب أن يكون الشخصية التالية كلاهما f و b في وقت واحد وهو أمر مستحيل.

ربما تريد هذا بدلاً من ذلك:

(?=.*foo)(?=.*baz)

هذا يقول ذلك foo يجب أن تظهر في أي مكان و baz يجب أن تظهر في أي مكان ، وليس بالضرورة بهذا الترتيب وربما متداخلة (على الرغم من أن التداخل غير ممكن في هذه الحالة المحددة لأن الحروف نفسها لا تتداخل).

نصائح أخرى

مثال على البحث المنطقي (و) بالإضافة إلى البحث البري ، والذي أستخدمه داخل مكون الإكمال التلقائي JavaScript:

سلسلة لتتناسب: "كلامي"

سلسلة للبحث: "أنا أبحث عن كلماتي المضحكة داخل هذا النص"

تحتاج إلى regex التالية:/^(?=.*my)(?=.*word).*$/im

شرح:

^ تأكيد الموقف في بداية الخط

?= lookahead إيجابية

.* يطابق أي حرف (باستثناء NewLine)

() مجموعات

$ تأكيد الموقف في نهاية الخط

أنا المعدل: غير حساس. تطابق غير حساس للحالة (يتجاهل حالة [A-ZA-Z])

م المعدل: متعدد الخطوط. أسباب ^ و $ لتتناسب مع بداية/نهاية كل سطر (لا تبدأ/نهاية السلسلة فقط)

اختبر regex هنا: https://regex101.com/r/is5jj3/1

لذلك ، يمكنك إنشاء وظيفة JavaScript:

  1. استبدل أحرف Regex المحجوزة لتجنب الأخطاء
  2. تقسيم السلسلة الخاصة بك في المساحات
  3. تغليف كلماتك داخل مجموعات Regex
  4. إنشاء نمط regex
  5. تنفيذ مباراة regex

مثال:

function fullTextCompare(myWords, toMatch){
    //Replace regex reserved characters
    myWords=myWords.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
    //Split your string at spaces
    arrWords = myWords.split(" ");
    //Encapsulate your words inside regex groups
    arrWords = $.map( arrWords, function( n ) {
        return ["(?=.*"+n+")"];
    });
    //Create a regex pattern
    sRegex = new RegExp("^"+arrWords.join("")+".*$","im");
    //Execute the regex match
    return(toMatch.match(sRegex)===null?false:true);
}

//Using it:
console.log(
    fullTextCompare("my word","I'm searching for my funny words inside this text")
);

//Wildcards:
console.log(
    fullTextCompare("y wo","I'm searching for my funny words inside this text")
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

ربما مجرد أو عامل | يمكن أن يكون كافيا لمشكلتك:

سلسلة: foo,bar,baz

Regex: (foo)|(baz)

نتيجة: ["foo", "baz"]

ربما كنت تبحث عن شيء مثل هذا. إذا كنت ترغب في تحديد السطر الكامل عندما يحتوي على كل من "Foo" و "Baz" في نفس الوقت ، فإن هذا regex سوف يمتثل:

.*(foo)+.*(baz)+|.*(baz)+.*(foo)+.*

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top