سؤال

أنا جديد تمامًا على التعبير العادي، وأحاول استخدامه لمطابقة القيم لتعيينها للمتغيرات (جافا سكريبت يبحث في الإخراج في responceText الذي تم إنشاؤه من برنامج نصي php).

في هذه اللحظة لدي هذا الرمز:

if (xmlhttp.readyState==4)
  {
  document.getElementById("test").innerHTML=xmlhttp.responseText;
  cmake = xmlhttp.responseText.match(/Combined_Make =(.*?)</);
  }

هنا هو (الجزء) من الإخراج الذي ينظر إليه:

echo "<span class=\"note\">";
echo "Test Output\n";
echo " Combined_Make = $model\n";
echo " Combined_Model = $marque\n";

عندما يتم تشغيل كل شيء، فإنه في الواقع ينظر إلى سطر مثل:

Combined_Make = GRAND JEEP CHEROKEE<br />

في هذه اللحظة أعود بالضبط هذا:

'Combined_Make = جراند جيب شيروكي>، جراند جيب شيروكي'

بالطبع أنا أسعى فقط إلى "GRAND JEEP CHEROKEE" في هذه الحالة :) - كما أنني لست متأكدًا من سبب استعادتي هذا الناتج الدقيق!

يرجى ملاحظة أنني سأحتاج إلى تعيين عدة var$، كل منها يستخدم نقطة بداية مختلفة للمباراة!

شكرا مقدما على أي مساعدة!

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

المحلول

يحاول:

/Combined_Make =([^<]+)/

وبعد ذلك ستحتاج إلى الوصول إلى مجموعة الالتقاط الأولى ([1]):

cmake = xmlhttp.responseText.match(/Combined_Make =([^<]+)/)[1];

قد ترغب في اختبار مدى مطابقتها قبل محاولة الوصول إلى مجموعة الالتقاط الأولى بالرغم من ذلك:

var match = xmlhttp.responseText.match(/Combined_Make =([^<]+)/);
cmake = match && match[1];

نصائح أخرى

وString.match() دوما بإرجاع صفيف، حتى عندما يكون هناك سوى مباراة واحدة (باستثناء عندما يكون هناك أي تطابق، ثم يعود NULL)

في حالة الأنماط التي تشمل مجموعات فرعية القبض عليه، وString.match() دوما بإرجاع المباراة نمط كامل في الفهرس 0، ثم مجموعة مطابقة لاحقة في الفهارس 1 إلى <م> N .

وهنا طريقة واضحة لإثبات أن

"hello".match( /he(ll)(o)/ );
// yields ["hello", "ll", "o"]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top