使用RegExp

时间:2016-01-21 19:29:22

标签: javascript html regex

我正在尝试使用RegExp找到几个文本匹配,所有这些匹配都显示在一个模式中。 例如: 假设我有一个包含“文本数组”的div标签:

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

我正在尝试使用regexp做的是找到3组:a,b和c。 当然所有这些都遵循一定的div,并且会看到引号和其他属性,这些属性在字符串中只显示一次,并且每个组都重复包含在方括号内。 但是,构建正则表达式只会提供第一组:a。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

以下是使用regexp 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>

答案 1 :(得分:0)

如果我正确理解了这个问题,这可能就是你要找的东西的开始:

// 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\]/));