2016-01-21 2 views
1

Я пытаюсь найти несколько текстовых совпадений с помощью RegExp, и все они отображаются внутри шаблона. Например: Предположим, у меня есть DIV тег, который содержит «текстовый массив»:Поиск нескольких экземпляров шаблонов в шаблоне с использованием RegExp

<div class="example" data-uris="[a][b][c]" data-title=".../> 

То, что я пытаюсь сделать с помощью регулярных выражений, это найти 3 группы: а, б и в. Все они, конечно, следуют за определенным div, а также за кадром и другими атрибутами, которые отображаются только один раз в строке, и каждая группа содержится в квадратных скобках, повторно. Однако создание регулярного выражения будет поставлять только первую группу: a.

Любые идеи?

+2

Предоставляет входы и ожидаемые выходы – Sachin

+0

Я сделал. Рассмотрим мой данный div. Для этого я хотел бы найти a, b и c (они могут быть длиннее одного символа, но этот пример будет делать хорошо) –

+0

с использованием jquery или только js? – Sachin

ответ

0

Вот расширенное решение с регулярное_выражение exec методом:

<div class="example" data-uris="[abc][bde][cfg]" data-title=""></div> 

var div = document.getElementsByClassName('example')[0], 
    uris = div.getAttribute('data-uris'), 
    match, 
    matches = [], 
    pattern = /\[([a-z]+)+?\]+/g; 

while((match = pattern.exec(uris)) != null){ 
    matches.push(match[1]); 
} 
console.log(matches); 
// output: Array [ "abc", "bde", "cfg" ] 

фрагмент кода:

var div = document.getElementsByClassName('example')[0], 
 
    uris = div.getAttribute('data-uris'), 
 
    match, 
 
    matches = [], 
 
    pattern = /\[([a-z]+)+?\]+/g; 
 
    
 
while((match = pattern.exec(uris)) != null){ 
 
    matches.push(match[1]); 
 
} 
 
console.log(matches);
<div class="example" data-uris="[abc][bde][cfg]" data-title=""></div>

+0

Мне нужно использовать один RegEx без возможности изменить/добавить код , чтобы я мог обеспечить div и его атрибут, а затем получить несколько совпадающих в квадратных скобках совпадений в пределах –

+0

@ShlomiUziel, что, если будет 50 divs с классом 'example' ? Какой из них следует выбрать? Похоже, вы собираетесь «изобрести» некоторую избыточную логику, которая могла бы быть проще. – RomanPerekhrest

+0

Тогда я хочу их всех –

0

Если я правильно понять вопрос, это может стать началом того, что вы e ищет:

// iteration through elements 
var elements = window.document.all; 
for (var i = 0, l = elements.length; i < l; i++) { 
    if (elements[i].localName === 'div') { 
     console.log(elements[i].outerHTML.match(/\[a\]\[b\]\[c\]/)); 
    } 
} 
// match on the document's text 
var html = window.document.documentElement.innerHTML; 
console.log(html.match(/\[a\]\[b\]\[c\]/)); 
+0

Мне нужно применить регулярное выражение на полный текст HTML, без применения каких-либо других методов (т.е. без перемещения дерева элементов DOM с помощью кода) –

+0

Доступ к нему можно получить через 'window.document.documentElement.innerHTML' , Я приведу пример. –

+0

Было любопытно, это помогло вам достичь того, что вы пытались сделать @ShlomiUziel? –

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