2014-01-26 4 views
2

Я пишу модуль узла, и я хочу найти все частичные элементы, используемые пылевым шаблоном.Захват нескольких вхождений javascript regex

У меня есть

regex = /\{\s*\>\s*("[^"]*").*\}/ 

и

test = " something { > \"templatename\" randomchars\" key=\"{random}\" } random { > \"base/templatename2\" thing=\"random\" }" 

Я хочу, чтобы захватить как templatename и base/templatename2.

Я пробовал с и без флага g, и я пробовал regex.exec(test) дважды и test.match(regex), но ни один из них не дал мне обоим. Что я делаю не так?

ответ

2

Сделайте .* не жадные (.*?), так что он не будет охватывать следующие имена шаблонов:

var matches = test.match(/\{\s*>\s*("[^"]*").*?\}/g) 

Это дает спичку, а не submatches. Для того, чтобы получить группы, используйте exec:

var r = /\{\s*>\s*("[^"]*").*?\}/g, m; 
while (m = r.exec(test)) { 
    console.log(m[1]); 
} 

Боковое уведомление: не было никакой необходимости, чтобы избежать >.

+0

спасибо :). Вот модуль кстати: https://npmjs.org/package/grunt-dust-require – Nonconformist

Смежные вопросы