2013-07-25 6 views
0

Я следующие выборки лексем внутри моей HTML-страниц:Фигурные скобки, знак равенства и Javascript регулярное выражение

{#abc,def#} 

Использование JavaScript Мне нужно извлечь текст из этих лексем, например:

abc,def 

Я использую этот рег ехр:

/(({#).*(?=#})) /g 

, но он соответствует две группы:

 
group1: {#test, date 
group2: {# 

Как я могу изменить их для соответствия правильным группам?

ответ

5
> '{#abc,def#}'.match(/{#(.*?)#}/)[1] 
'abc,def' 

UPDATE

> var xs = '{#abc,def#} foobar {#ghi,jkl#}'.match(/{#(.*?)(?=#})/g); 
> for (var i = 0; i < xs.length; i++) xs[i] = xs[i].substr(2); 
> xs 
[ 'abc,def', 'ghi,jkl' ] 

Или один вкладыш:

var tokens = (str.match(/{#(.*?)(?=#})/g) || []).map(function(match) 
{ 
    return match.substr(2); 
}); 
console.log(tokens);//[ 'abc,def', 'ghi,jkl' ] 

Если вы хотите поддерживать все браузеры/реализации, возможно, придется увеличить в proptotype массива:

if (!Array.prototype.map) 
{ 
    Array.prototype.map = function(callback) 
    { 
     if (typeof callback !== 'function') 
     { 
      throw new TypeError(callback + ' is not a function'); 
     } 
     for(var i = 0;i<this.length;i++) 
     { 
      this[i] = callback(this[i]); 
     } 
     return this.slice(); 
    }; 
} 
+0

Это происходит с строками типа '' {# abc, def #} foobar {# ghi, jkl #} '' –

+0

@EliasVanOotegem как? –

+1

@ m.buettner: в js нет взаимного соответствия с группами. Им нужно прибегнуть к exec/replace, чтобы захватить их всех. – georg

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