2013-12-14 3 views
1

Я хочу сопоставить несколько атрибутов data-i18n с регулярным выражением JavaScript.Regex несколько совпадений для атрибутов HTML

Я попробовал следующее регулярное выражение:

var regexp = /(data\-i18n="[^"]+")/g; 

, который в моей голове, казалось, довольно прямо вперед, но в конечном итоге не работает.

Если вы пытаетесь соответствовать на следующий HTML-тег:

<a random-attr="ok" data-i18n="first match" data-i18n="second match">my text</a> 

делать в Exec так:

/(data\-i18n="[^"]+")/g.exec('<a random-attr="ok" data-i18n="first match" data-i18n="second match">my text</a>') 

поднимет следующий вопрос:

  • Есть два но они на самом деле дублируют совпадения.

Результат:

[ 'data-i18n="first match"', 
    'data-i18n="first match"', 
    index: 20, 
    input: '<a random-attr="ok" data-i18n="first match" data-i18n="second match">my text</a>' ] 
  • Любые идеи о том, как иметь несколько совпадений для моего атрибута?

Заранее благодарен!

+6

О, Боже нет, догадайся, что пришло время для [** TH̘Ë͖̉ ͠P̯͍̭O̚ N̐Y̡ H̸̡̪̯ͨ͊̽̅̾Ȩ̬̩̾͛ͪ̈͘ ̶̧̨̹̭̯ͧ̾ͬC̷̙̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔ **] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self- содержащиеся теги) – adeneo

+2

'document.getElementsByTagName ('a') [0] .getAttribute ('data-i18n')' – adeneo

+0

И вы не можете иметь два атрибута с тем же именем. – adeneo

ответ

1

Проблема не в вашем регулярном выражении; его, как вы ожидаете, exec, чтобы вести себя. Возвращаемое значение exec имеет полное совпадение в позиции 0, а затем соответствие каждой группы захвата после этого. Поскольку вы завернули все регулярное выражение в группе захвата, вы видите одну и ту же строку в позициях 0 и 1 массива.

Правильный способ использования глобального регулярного выражения с exec заключается в том, чтобы продолжать звонить exec до тех пор, пока он не вернет null; он будет возвращать следующий матч каждый раз. Однако, если вы используете String.match(Regexp), он вернет то, что вы ожидаете, - массив, содержащий все совпадения.

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