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

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

سؤال

في جافا سكريبت، لقد حصلت كتلة من HTML مثل هذا:

<h2>{title}</h2>
<p><a href="{url}">{content}</a></p>

وأنا أحاول استخدام التعبير العادي "مباراة" لبصق مجموعة من كل {البند} الصورة. لذلك الناتج بلدي يجب أن تبدو:

['title', 'url', 'content']

ولقد حصلت بقدر ما:

var pattern = new RegExp("\{[a-zA-Z]+\}+");
var match = pattern.exec("{Sample} bob {text}");

ولكن انها فقط عودة العلامة الأولى.

وهذا هو أبعد من مجرد مهارات التعابير المنطقية بلدي. يمكن لأي شخص أن تساعد؟

وهتاف!

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

المحلول

وتحتاج إلى خلق نمط مع العلم العالمي:

var pattern = new RegExp("\{[a-zA-Z]+\}", "g");

وأو:

var pattern = /\{[a-zA-Z]+\}/g;

وبعد ذلك يمكنك استدعاء الأسلوب مباراة () على سلسلة الخاص بك للحصول على قائمة من المباريات:

var matches = "{Sample} bob {text}".match(pattern);

نصائح أخرى

وأعتقد أنك تريد:

var pattern = new RegExp("\{[a-zA-Z]+\}+", "g");

والخيار الثاني هو العلم يقولون ذلك للبحث في السلسلة بأكملها وإعادة جميع المباريات.

وانظر: http://www.evolt.org/article/Regular_Expressions_in_JavaScript/ 17/36435 / للحصول على مزيد من التفاصيل.

هل جربت هذا حتى الآن؟

<script>
var text = '<h2>{title}</h2>\n<p><a href="{url}">{content}</a></p>';
var regex = /\{[a-z]+\}/ig;
var result = text.match(regex);
for (var i = 0; i < result.length; i++) {
    console.debug(i + ". " + result[i]);
}
/*
gives:
0. {title}
1. {test}
2. {url}
3. {content}
*/
</script>

وكما الكثير أحب أن لفة بلدي التعبير العادي (وكنت حقا بحاجة فقط العلم العالمي)، هل نظرت إلى <لأ href = "http://www.prototypejs.org/api/template" يختلط = "نوفولو noreferrer "> قوالب النموذج أو Trimpath JST أو أي شيء من هذا القبيل

ولأن ربما المتداول بنفسك لن تكون فعالة لإعادة استخدامها كما في الأمثلة المذكورة أعلاه. EG:

String.prototype.template = function (obj) {
 return this.replace(/{([^{}]+)}/g,
  function (full, word) {
   return((typeof obj[word]==='string'||typeof obj[word]==='number')?obj[word]:full);
  }
 );
};

"The {adj1} {adj2} {noun}.".template({adj1: 'lazy',adj2: 'brown', noun: 'dog'})
==> "The lazy brown dog."

وهذا يعمل باستخدام التعابير المنطقية في كل مرة، في حين اعتقد القوالب النموذج أساسا يفعل ذلك مرة واحدة.

ونزلت المسار باستخدام exec للاختبار.

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