كيف يمكنني عكس العادية التعبير في جافا سكريبت ؟

StackOverflow https://stackoverflow.com/questions/1538512

  •  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) {
  // ...
}

http://www.w3schools.com/jsref/jsref_indexOf.asp

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