如果存在另一个特定属性,则JavaScript正则表达式匹配标记中的属性

时间:2015-07-10 09:57:54

标签: javascript regex

我有一个字符串模式:

<div content="[...]" class="[...]">[...]</div>
<div content="website" [...] class="_type">[...]</div>
<dic content="[...]" class="[...]">[...]</div>

我的问题是我如何使用此处的代码获取“网站”文字。

我试过了:

/content="(.+?)".*?class="_type"/g

但结果不是预期的:[...]

1 个答案:

答案 0 :(得分:1)

这是一个可以获取子字符串的正则表达式。

var re = /<(?=[^<>]*\bclass="_type")div\b[^<>]*content="([^"]*)"/ig; 

正则表达式匹配任何包含<div>并且还包含content="的{​​{1}}字符串。结果存储在捕获的组1中。请注意,class="_type"可以在class="_type"之前或之后。

代码可以是:

content="{our string}"
var re = /<(?=[^<>]*\bclass="_type")div\b[^<>]*content="([^"]*)"/ig; 
var str = '<div content="[...]" class="[...]">[...]</div>\n<div content="website" [...] class="_type">[...]</div>\n<dic content="[...]" class="[...]">[...]</div>';
var m;
 
while ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    document.getElementById("r").innerHTML += m[1] + "<br/>";
}
如果您不知道HTML中将使用哪种分隔符,则会使问题更加严重。但是,仍有可能:

<div id="r"/>
var re = /<(?=[^<>]*\bclass=['"]?_type\b['"]?)div\b[^<>]*content=(?:["']([^<]*?)["']|(\S+))/ig; 
var str = '<div content="[...]" class="[...]">[...]</div>\n<div content=\'[...]\' class=\'[...]\'>[...]</div>\n<div content="web site" [...] class="_type">[...]</div>\n<dic content="[...]" class="[...]">[...]</div>\n<dic content=[...] class=[...]>[...]</div>\n<dic content=\'[...]\' class=\'[...]\'>[...]</div>\n<div content=\'web site\' [...] class=\'_type\'>[...]</div>\n<div content=website [...] class=_type>[...]</div>';
var m;
 
while ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    if (m[1] === undefined) {
      document.getElementById("e").innerHTML += m[2] + "<br/>";
    }
  else {
      document.getElementById("e").innerHTML += m[1] + "<br/>";
    }
    
}