/ PM بناء جملة Regex لإرسال رسالة في غرفة الدردشة

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

  •  19-09-2019
  •  | 
  •  

سؤال

أنا أعمل على غرفة AJAX / PHP chad وانت عالقة حاليا على Regex للكشف عن ما إذا كان المستخدم قد أرسل مساء ثم العمل من هو أيضا وما هي الرسالة.

إذا كان المستخدم أنواع شيء مثل

/ PM Pezcuckow مرحبا بكم رائع جدا!

أرغب في الاختبار الأول إذا تطابقت سلسلة بلدي من هذا النمط، ثم احصل على "Pezcuckow" و "مرحبا هناك!" كسلاسل للنشر إلى PHP.

لقد قمت ببعض الأبحاث على Regex ولكن ليس لها فكرة حقا أين أن أبدأ بهذا! هل يمكنك المساعدة

== بفضل الجميع مساعدة هذا يتم حلها الآن! ==

var reg = /^\/pm\s+(\w+)\s+(.*)$/i;
var to = "";

if(message.match(reg)) {
    m = message.match(reg);
    to = m[1];
    message = m[2];
}
هل كانت مفيدة؟

المحلول

كيف حول هذا:

var reg = /^\/pm\s+(\w+)\s+(.*)$/i,
    m = '/pm PezCuckow Hi There you so awesome!'.match(reg);

m[0]; // "PezCuckow"
m[1]; // "Hi There you so awesome!"

يطابق "/pm" تليها Whitespace. " " (تقبل بحرية المساحات الإضافية)، تليها اسم المستخدم \w+, تليها مسافة بيضاء " " Agin، ثم أخيرا الرسالة .* (وهو أساس كل شيء في نهاية الخط).

نصائح أخرى

هذا Regex يوزع رسالة:

^(?:\s*/(\w+)\s*(\w*)\s*)?((?:.|[\r\n])*)$

تفسير:

^              # start-of-string
(?:            # start of non-capturing group
  \s*/         #   a "/", preceding whitespace allowed
  (\w+)        #   match group 1: any word character, at least once (e.g. option)
  \s+          #   delimiting white space
  (\w*)        #   match group 2: any word character (e.g. target user)
  \s+          #   delimiting white space
)?             # make the whole thing optional
(              # match group 3:
  (?:          #   start of non-capturing group, either
    .          #     any character (does not include newlines)
    |          #     or
    [\r\n]     #     newline charaters
  )*           #   repeat as often as possible
)              # end match group 3

في حالتك ("/pm PezCuckow Hi There you so awesome!"):

  • المجموعة 1: "PM"
  • المجموعة 2: "Pezcuck"
  • المجموعة 3: "مرحبا هناك رائع جدا!"

في حالة أكثر عمومية ("Hi There you so awesome!")

  • مجموعة 1: ""
  • المجموعة 2: ""
  • المجموعة 3: "مرحبا هناك رائع جدا!"

لاحظ أن خفض الأمام يحتاج إلى الضغط من حرفي JavaScript Regex:

/foo\/bar/

ولكن ليس في أنماط ريجيكس بشكل عام.

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

var re = /(\/\w+) (\w+) (.+)/;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top