正则表达式(javascript)如何多次匹配两个标记之间的任何内容

正则表达式(javascript)如何多次匹配两个标记之间的任何内容,javascript,regex,Javascript,Regex,我正在尝试查找HTML页面中所有出现在和标记之间的项目。 编辑:(nobr就是一个例子。我需要在随机字符串之间查找内容,而不总是标记) 我试过这个 var match = /<nobr>(.*?)<\/nobr>/img.exec(document.documentElement.innerHTML); alert (match); var match=/(.*)/img.exec(document.documentElement.innerHTML); 警报(匹配);

我正在尝试查找HTML页面中所有出现在
标记之间的项目。 编辑:(nobr就是一个例子。我需要在随机字符串之间查找内容,而不总是标记)

我试过这个

var match = /<nobr>(.*?)<\/nobr>/img.exec(document.documentElement.innerHTML);
alert (match);
var match=/(.*)/img.exec(document.documentElement.innerHTML);
警报(匹配);
但它只出现了一次它出现两次,一次带有
标记,一次不带标记。我只需要没有标签的版本。

使用DOM

var nobrs = document.getElementsByTagName("nobr")
然后,您可以循环遍历所有nobr并提取innerHTML或对其应用任何其他操作。

使用DOM

var nobrs = document.getElementsByTagName("nobr")

然后,您可以在所有nobr中循环并提取innerHTML或对其应用任何其他操作。

您需要在循环中执行此操作

var match, re = /<nobr>(.*?)<\/nobr>/img;
while((match = re.exec(document.documentElement.innerHTML)) !== null){
   alert(match[1]);
}
var匹配,re=/(.*)/img;
while((match=re.exec(document.documentElement.innerHTML))!==null){
警报(匹配[1]);
}

你需要在一个循环中完成

var match, re = /<nobr>(.*?)<\/nobr>/img;
while((match = re.exec(document.documentElement.innerHTML)) !== null){
   alert(match[1]);
}
var匹配,re=/(.*)/img;
while((match=re.exec(document.documentElement.innerHTML))!==null){
警报(匹配[1]);
}
您可以使用

while (match = /<nobr>(.*?)<\/nobr>/img.exec("foo <nobr> hello </nobr> bar <nobr> world </nobr> foobar"))
    alert (match[1]);
while(match=/(.*)/img.exec(“foo hello bar world foobar”))
警报(匹配[1]);
您可以使用

while (match = /<nobr>(.*?)<\/nobr>/img.exec("foo <nobr> hello </nobr> bar <nobr> world </nobr> foobar"))
    alert (match[1]);
while(match=/(.*)/img.exec(“foo hello bar world foobar”))
警报(匹配[1]);
(因为我无法评论拉斐尔的正确答案…)

exec
正在执行它应该执行的操作-查找第一个匹配项,在
match
对象中返回结果,并为下一个
exec
调用设置。
match
对象包含(在索引0处)与整个正则表达式匹配的整个字符串。在随后的插槽中,是由括号中的子组匹配的字符串位。因此,
match[1]
在您的示例中包含由“(.*)”匹配的字符串位。

(因为我无法评论Rafael的正确答案…)


exec
正在执行它应该执行的操作-查找第一个匹配项,在
match
对象中返回结果,并为下一个
exec
调用设置。
match
对象包含(在索引0处)与整个正则表达式匹配的整个字符串。在随后的插槽中,是由括号中的子组匹配的字符串位。因此,
match[1]
包含示例中由“(.*)”匹配的字符串位。

如果您使用的字符串不是xml元素,并且您坚持使用正则表达式,那么您得到的返回值可以用括号来解释。exec返回整个匹配字符串,后跟括号内表达式的内容

如果您的文档包含:

This is out.
Bzz. This is in. unBzz.
这已经过时了。
Bzz。这是我的。unBzz.
然后


/Bzz.(.*?)unBzz./img.exec(document.documentElement.innerHTML)

我会给你的。这是我的。在返回数组的元素0中unBzz.'和元素1中的'This is in'。尝试显示整个数组会将两者都显示为逗号分隔的列表,因为JavaScript就是这样尝试显示它的

所以

警报($match[1]);

是您所追求的。

如果您使用的字符串不是xml元素,并且您坚持使用正则表达式,那么您得到的返回值可以用括号来解释。exec返回整个匹配字符串,后跟括号内表达式的内容

如果您的文档包含:

This is out.
Bzz. This is in. unBzz.
这已经过时了。
Bzz。这是我的。unBzz.
然后


/Bzz.(.*?)unBzz./img.exec(document.documentElement.innerHTML)

我会给你的。这是我的。在返回数组的元素0中unBzz.'和元素1中的'This is in'。尝试显示整个数组会将两者都显示为逗号分隔的列表,因为JavaScript就是这样尝试显示它的

所以

警报($match[1]);

这就是你所追求的。

需要步骤,但你可以这样做

match = document.documentElement.innerHTML.match(/<nobr>(.*?)<\/nobr>/img)
alert(match)//includes '<nobr>'

match_length = match.length;
for (var i = 0; i < match_length; i++)
{
    var match2 = match[i].match(/<nobr>(.*?)<\/nobr>/im);//same regex without the g option
    alert(match2[1]);
}
match=document.documentElement.innerHTML.match(/(.*)/img)
警报(匹配)//包括“”
match_length=match.length;
对于(变量i=0;i
这需要很多步骤,但您可以这样做

match = document.documentElement.innerHTML.match(/<nobr>(.*?)<\/nobr>/img)
alert(match)//includes '<nobr>'

match_length = match.length;
for (var i = 0; i < match_length; i++)
{
    var match2 = match[i].match(/<nobr>(.*?)<\/nobr>/im);//same regex without the g option
    alert(match2[1]);
}
match=document.documentElement.innerHTML.match(/(.*)/img)
警报(匹配)//包括“”
match_length=match.length;
对于(变量i=0;i
这是一个很好的解决方案,但我需要一个适用于HTML文件中任何模式的通用解决方案,而不仅仅是标准tagsgetElementsByTagName()适用于文档中任何格式良好的xml,不仅仅是有效的xhtml标记。也许您应该在问题中指出这一点。这是一个很好的解决方案,但我需要一个适用于HTML文件中任何模式的通用解决方案,而不仅仅是标准标记GetElementsByTagname()适用于文档中任何格式良好的xml,不仅仅是有效的xhtml标记。也许您应该在问题中指出这一点。如果您使用string.match(regex)而不是regex.exec(string),您会得到什么结果?您的问题是关于javascript中的全局子匹配-()如果您使用string.match(regex)而不是regex.exec(string),您会得到什么结果?您的问题是关于javascript中的全局子匹配-()不需要使用“!==null”。表达式的计算结果为false,如果没有它,则很好。不需要此“!==null”。表达式的计算结果为false,没有它就可以了。结果表明,当执行像这样的while循环时,IE中存在一个bug。Rafaels的方法应该是可行的,当做这样一个while循环时,IE中出现了一个bug。拉斐尔的方法应该奏效