2013-10-04 3 views
1

Я не могу понять, как вытащить несколько матчей из следующего примера:Использование Regex, чтобы вытащить часть строки

Этот код:

/prefix-(\w+)/g.exec('prefix-firstname prefix-lastname'); 

возвращается:

["prefix-firstname", "firstname"] 

Как заставить его вернуться:

[ 
    ["prefix-firstname", "firstname"], 
    ["prefix-lastname", "lastname"] 
] 

Или

["prefix-firstname", "firstname", "prefix-lastname", "lastname"] 
+2

используйте '.match()' или вам придется использовать цикл. – Jerry

+0

Это даже не работает. Как получить часть, которая находится только в скобках регулярного выражения? Match возвращает "prefix-firstname", "prefix-lastname" – JayPrime2012

ответ

2

Использование цикла:

re = /prefix-(\w+)/g; 
str = 'prefix-firstname prefix-lastname'; 
match = re.exec(str); 
while (match != null) { 
    match = re.exec(str); 
} 

Вы получаете каждый матч один на один раз.


Использование матча:

Здесь регулярное выражение будет иметь, чтобы быть немного по-другому, потому что вы не можете получить вложенные снимки (или я не знаю, как сделать это с несколькими матчами) .. .

re = /[^\s-]+(?=\s|$)/g; 
str = 'prefix-firstname prefix-lastname'; 
match = str.match(re); 
alert(match); 

[^\s-]+ матчи все символы, кроме пробелов и тире/дефис, только если они следуют пробелом или находятся в конце строки, которая является confition налагаемые (?=\s|$).

4

Это будет делать то, что вы хотите:

var str="prefix-firstname prefix-lastname"; 
var out =[]; 

str.replace(/prefix-(\w+)/g,function(match, Group) { 

    var row = [match, Group] 
    out.push(row); 

}); 

Вероятно, неправильно использование .Привернуть, но я не думаю, что вы можете передать функцию .match ...

_Pez

0

вы можете найти группы в два этапа:

"prefix-firstname prefix-lastname".match(/prefix-\w+/g) 
.map(function(s) { return s.match(/prefix-(\w+)/) }) 
Смежные вопросы