it-swarm.dev

تعبير منتظم للحصول على سلسلة بين الأقواس في Javascript

أحاول كتابة تعبير منتظم يُرجع سلسلة بين قوسين. على سبيل المثال: أريد الحصول على السلسلة الموجودة بين السلاسل "(" و ")"

I expect five hundred dollars ($500).

سيعود

$500

تم العثور على تعبير عادي للحصول على سلسلة بين سلسلتين في Javascript

لكنني جديد مع regex. لا أعرف كيفية استخدام "(" ، ")" في إعادة الاسترداد

141
Okky

تحتاج إلى إنشاء مجموعة من الأقواس المتجاوزة (مع \) (التي تتطابق مع الأقواس) ومجموعة من الأقواس العادية التي تنشئ مجموعة الالتقاط الخاصة بك:

var regExp = /\(([^)]+)\)/;
var matches = regExp.exec("I expect five hundred dollars ($500).");

//matches[1] contains the value between the parentheses
console.log(matches[1]);

انفصال:

  • \(: تطابق قوس فتح
  • (: ابدأ في التقاط المجموعة
  • [^)]+: تطابق حرفًا واحدًا أو أكثر من أحرف )
  • ): إنهاء مجموعة الالتقاط
  • \): مطابقة أقواس الإغلاق

هنا شرح مرئي على RegExplained

387
go-oleg

حاول معالجة السلسلة:

var txt = "I expect five hundred dollars ($500). and new brackets ($600)";
var newTxt = txt.split('(');
for (var i = 1; i < newTxt.length; i++) {
    console.log(newTxt[i].split(')')[0]);
}

أو regex ( وهو بطيء إلى حد ما مقارنة ببطء مع ما سبق)

var txt = "I expect five hundred dollars ($500). and new brackets ($600)";
var regExp = /\(([^)]+)\)/g;
var matches = txt.match(regExp);
for (var i = 0; i < matches.length; i++) {
    var str = matches[i];
    console.log(str.substring(1, str.length - 1));
}
28
Mr_Green

Ported إجابة Mr_Green على نمط برمجة وظيفي لتجنب استخدام المتغيرات العامة المؤقتة.

var matches = string2.split('[')
  .filter(function(v){ return v.indexOf(']') > -1})
  .map( function(value) { 
    return value.split(']')[0]
  })
8
silkAdmin

حل بسيط

إشعار : يستخدم هذا الحل للسلسلة التي تحتوي فقط على سلسلة "(" و ")" مثل السلسلة في هذا السؤال.

("I expect five hundred dollars ($500).").match(/\((.*)\)/).pop();

عرض توضيحي عبر الإنترنت (jsfiddle)

3
Ali Soltani

للأرقام فقط بعد علامة العملة: يجب أن تعمل \(.+\s*\d+\s*\)

أو \(.+\) لأي شيء داخل الأقواس

3
P0W

لمطابقة سلسلة فرعية داخل الأقواس باستثناء أي أقواس داخلية قد تستخدمها

\(([^()]*)\)

نمط. راجع the عرض regex .

في JavaScript ، استخدمها مثل

var rx = /\(([^()]*)\)/g;

تفاصيل النموذج

  • \( - حرف ( char
  • ([^()]*) - مجموعة الالتقاط 1: فئة حرف سالبة مطابقة أي أحرف 0 أو أكثر بخلاف ( و )
  • \) - حرف ) char.

للحصول على التطابق الكامل ، احصل على قيمة Group 0 ، إذا كنت بحاجة إلى النص الموجود داخل الأقواس ، فعليك الحصول على قيمة Group 1:

var strs = ["I expect five hundred dollars ($500).", "I expect.. :( five hundred dollars ($500)."];
var rx = /\(([^()]*)\)/g;


for (var i=0;i<strs.length;i++) {
  console.log(strs[i]);

  // Grab Group 1 values:
  var res=[], m;
  while(m=rx.exec(strs[i])) {
    res.Push(m[1]);
  }
  console.log("Group 1: ", res);

  // Grab whole values
  console.log("Whole matches: ", strs[i].match(rx));
}
2
Wiktor Stribiżew
var str = "I expect five hundred dollars ($500) ($1).";
var rex = /\$\d+(?=\))/;
alert(rex.exec(str));

سيتطابق مع الرقم الأول الذي يبدأ بـ $ ويتبعه ")". ')' لن يكون جزءًا من المباراة. تنبيهات الرمز مع المطابقة الأولى.

var str = "I expect five hundred dollars ($500) ($1).";
var rex = /\$\d+(?=\))/g;
var matches = str.match(rex);
for (var i = 0; i < matches.length; i++)
{
    alert(matches[i]);
}

هذا الرمز ينبه مع جميع المباريات.

المراجع:

البحث عن "؟ = n" http://www.w3schools.com/jsref/jsref_obj_regexp.asp

البحث عن "x (؟ = y)" https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp

0
AJ Dhaliwal