جاوااسکریپت - چگونه از یک عبارت منظم در یک سلکتور jQuery استفاده کنیم؟


من به دنبال مستنداتی در مورد استفاده از کاراکترهای جایگزین یا عبارات منظم (مطمئن نیستم اصطلاح دقیق چیست) با یک سلکتور jQuery هستم.

من خودم به دنبال این بودهام اما نتوانستهام اطلاعاتی در مورد نحو و نحوه استفاده از آن پیدا کنم. آیا کسی میداند مستندات مربوط به نحو کجا است؟

ویرایش: فیلترهای ویژگی به شما امکان میدهند بر اساس الگوهای یک مقدار ویژگی انتخاب کنید.

پاسخ شماره ۱

شما میتوانید از تابع filter برای اعمال تطبیق regex پیچیدهتر استفاده کنید.

در اینجا یک مثال است که فقط با سه div اول مطابقت خواهد داشت:

$('div')
  .filter(function() {
    return this.id.match(/abc+d/);
  })
  .html("Matched!");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="abcd">Not matched</div>
<div id="abccd">Not matched</div>
<div id="abcccd">Not matched</div>
<div id="abd">Not matched</div>

پاسخ شماره ۲

جیمز پادولسی یک فیلتر شگفتانگیز ایجاد کرد که امکان استفاده از regex برای انتخاب را فراهم میکند.

فرض کنید شما div زیر را دارید:

<div class="asdf">

فیلتر :regex پادولسی میتواند آن را به این شکل انتخاب کند:

$("div:regex(class, .*sd.*)")

همچنین، مستندات رسمی در مورد سلکتورها را بررسی کنید.

بهروزرسانی: : نگارش منسوخ شده در JQuery 3.0

از آنجایی که jQuery.expr[':'] که در پیادهسازی پادولسی استفاده شده است، قبلاً منسوخ شده و در آخرین نسخه jQuery باعث خطای نحوی میشود، این کد او با نحو jQuery 3+ تطبیق داده شده است:

jQuery.expr.pseudos.regex = jQuery.expr.createPseudo(function (expression) {
    return function (elem) {
        var matchParams = expression.split(','),
            validLabels = /^(data|css):/,
            attr = {
                method: matchParams[0].match(validLabels) ?
                    matchParams[0].split(':')[0] : 'attr',
                property: matchParams.shift().replace(validLabels, '')
            },
            regexFlags = 'ig',
            regex = new RegExp(matchParams.join('').replace(/^\s+|\s+$/g, ''), regexFlags);
        return regex.test(jQuery(elem)[attr.method](attr.property));
    }
});

پاسخ شماره ۳

اینها میتوانند مفید باشند.

اگر از طریق Contains پیدا میکنید، پس به این شکل خواهد بود

    $("input[id*='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

اگر شما با شروع با جستجو میکنید، پس اینگونه خواهد بود

    $("input[id^='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

اگر شما با پایان با پیدا میکنید، پس اینگونه خواهد بود

     $("input[id$='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

اگر میخواهید عناصری را انتخاب کنید که شناسه آنها برابر با یک رشته مشخص نیست

    $("input[id!='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

اگر میخواهید المانهایی را انتخاب کنید که نام آنها شامل یک کلمه خاص باشد، که توسط فاصلهها جدا شده است

     $("input[name~='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

اگر میخواهید عناصری را انتخاب کنید که شناسه آنها برابر با یک رشته داده شده باشد یا با آن رشته شروع شده و پس از آن یک خط تیره داشته باشد

     $("input[id|='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

پاسخ شماره ۴

اگر استفاده شما از عبارت منظم محدود به آزمایش این است که آیا یک ویژگی با رشته خاصی شروع میشود، میتوانید از انتخابگر ^ در JQuery استفاده کنید.

برای مثال اگر بخواهید تنها div با id که با "abc" شروع میشود را انتخاب کنید، میتوانید از این استفاده کنید:

$("div[id^='abc']")

میتوان تعداد زیادی از سلکتورهای بسیار مفید برای اجتناب از استفاده از regex را در اینجا یافت: http://api.jquery.com/category/selectors/attribute-selectors/

پاسخ شماره ۵

var test = $('#id').attr('value').match(/[^a-z0-9 ]+/);

بفرمایید!