Почему этот простой REGEX не работает?

http://jsfiddle.net/C4K6c/

Я пытаюсь сделать простое регулярное выражение в JavaScript, но оно не работает.

HTML:

<div id="content">
 
 
  
</div>

JS:

var content = document.getElementById('content').innerHTML,
 matches = content.match(/<img(.+)data-frame(.+)>/);

for(var i=0; i < matches.length; i++) {
 alert( matches[i] )
}
</img(.+)data-frame(.+)>

Я не возвращаю то, что ожидаю, вот что:

4 ответа

Добавьте флаг g и избегайте закрытия > чтобы избежать

в вашем матче. И чтобы избежать других проблем, если ваш HTML может быть более разнообразным, вы также должны изменить первый .+:
matches = content.match(/<img([^>]+)data-frame([^>]+)>/g);
</img([^>

демонстрация


http://jsfiddle.net/C4K6c/3/

Насколько я люблю регулярное выражение, я настоятельно рекомендую использовать DOM в ваших интересах.

var content = document.getElementById('content');
var images = content.getElementsByTagName('img');
var final = [];
for (var i = 0; i< images.length; i++)
 if (images[i].hasAttribute("data-frame"))
 final.push(images[i]);

Преимущество этого алгоритма заключается в самодокументировании. Это также возможно быстрее, чем использование регулярного выражения.


Постарайтесь сделать это не жадным и круглый стол DOTALL:

matches = content.match(/<img([\s\s]+?)data-frame([^>]*)>/ig);
</img([\s\s]+?)data-frame([^>

Я также добавил global и ignore case событий.


Я не знаю о java, но обычно вам нужно избегать символов <> следующим образом:

matches = content.match(/\<img(.+)data-frame(.+)\>/);
</img(.+)data-frame(.+)\>

licensed under cc by-sa 3.0 with attribution.