كيف يمكنني عكس العادية التعبير في جافا سكريبت ؟
-
20-09-2019 - |
سؤال
لدي سلسلة A و ترغب في اختبار إذا كان آخر سلسلة B هو ليس جزءا منه.هذا هو جدا بسيطة باستخدام التعابير المنطقية التي يمكن أن تكون النتيجة مقلوب بعد ذلك.
أنا يمكن أن تفعل:
/foobar/.test('foobar@bar.de')
وعكس ذلك بعد ذلك, مثل هذا:
!(/foobar/).test('foobar@bar.de')
المشكلة لدي هو أنني بحاجة إلى أن تفعل ذلك في التعبير العادي وليس مع نتائجها.شيء من هذا القبيل:
/!foobar/.test('foobar@bar.de')
(الذي لا يعمل)
وبعبارة أخرى:التعبير العادي أن اختبار عدم وجود والعودة الحقيقية في هذه الحالة.
هل هذا ممكن مع جافا سكريبت ؟
المحلول
محاولة:
/^(?!.*foobar)/.test('foobar@bar.de')
(قصيرة) التفسير:
^ # start of the string
(?! # start negative look-ahead
.* # zero or more characters of any kind (except line terminators)
foobar # foobar
) # end negative look-ahead
حتى في سهل الانجليزية ، regex سوف ننظر من بداية السلسلة إذا كانت السلسلة 'س' يمكن أن يكون "رؤية".إذا كان يمكن أن يكون "رؤية" هناك لا* المباراة.
* أي مباراة لأنه السلبية نظرة إلى الأمام!
المزيد عن هذا نظرة إلى الأمام الاشياء: http://www.regular-expressions.info/lookaround.html ولكن لاحظ أن جافا سكريبت فقط يدعم نظرة aheads لا تبدو-المؤخرة!
نصائح أخرى
^(?!.*(word1|word2|word3))
سوف وتتطابق مع السلسلة التي لا تحتوي على أي من word1
، word2
، أو word3
(ويمكنك توسيع قائمة إلى أجل غير مسمى).
ولكن هذه المباريات أيضا سلاسل فارغة. رفض استخدام القيم الخالية
^(?!$)(?!.*(word1|word2|word3))
وهنا مثال على عدم المساواة. أولا أنا عزل '<'، في وقت لاحق المعاملات "أ" و "ب" المشغل. في الأساس، أود أن أغتنم التعبير المباشر، إدراجه في الأقواس اليمنى، وعكس هذا الأخير من قبل '^' وأخيرا تضمين التعبير مما أدى إلى معقوفتين، 'قضية' ^ 'في بداية سيفسر بشكل مختلف.
var _str = "a < b" ;
var _op = /</g ;
var _no_op = /[^(<|\ )]/g ;
console.log( _str, _str.match( _op ) ); // get '<'
console.log( _str, _str.match( _no_op ) ); // get 'a', 'b'
وP.s: أنا فقط واضاف المساحة الفارغة في التعبير معكوس، من أجل استرداد مطابقة الدقيق للالمعاملات.
إذا ما كنت تبحث عن الحقيقة ليست أكثر تعقيدا من سلسلة بسيطة مثل "foobar":
if (yourString.indexOf("foobar") === -1) {
// ...
}