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

JavaScript regex matching an attribute in tag if another specific attribute is present

本文关键字:属性 正则表达式 JavaScript 另一个 存在 如果      更新时间:2023-09-26

我有一个字符串模式:

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

我的问题是如何在这里使用代码获得"网站"文本。

I have try:

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

但结果出乎意料:[...] .

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

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

正则表达式匹配任何包含<div>且包含content="class="_type"的字符串。结果存储在捕获的组1中。注意,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/>";
}
<div id="r"/>
如果您不知道HTML中会有什么样的分隔符,那么这会使问题变得更大。但是,仍然有可能:

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/>";
    }
    
}
<div id="e"/>