正则表达式(javascript)如何在两个标签之间任意次匹配任何内容

时间:2009-05-18 14:40:23

标签: javascript regex

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

我试过这个

var match = /<nobr>(.*?)<\/nobr>/img.exec(document.documentElement.innerHTML);
alert (match);

但它只发生一次。 +它出现两次,一次是<nobr></nobr>标签,一次没有它们。我只需要没有标签的版本。

6 个答案:

答案 0 :(得分:5)

使用DOM

var nobrs = document.getElementsByTagName("nobr")

然后你可以遍历所有的nobrs并提取innerHTML或对它们应用任何其他动作。

答案 1 :(得分:5)

你需要在循环中完成

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

答案 2 :(得分:2)

(因为我不能评论拉斐尔的正确答案......)

exec正在做它应该做的事情 - 找到第一个匹配项,在match对象中返回结果,然后为下一个exec调用进行设置。 match对象包含(在索引0处)整个正则表达式匹配的整个字符串。在后续的时隙中是由带括号的子组匹配的字符串的位。因此match[1]包含在您的示例中与“(。*?)”匹配的字符串的位。

答案 3 :(得分:1)

你可以使用

while (match = /<nobr>(.*?)<\/nobr>/img.exec("foo <nobr> hello </nobr> bar <nobr> world </nobr> foobar"))
    alert (match[1]);

答案 4 :(得分:1)

如果您使用的字符串不是xml元素,并且您正在使用正则表达式,则可以通过包围来解释您获得的返回值。 .exec返回整个匹配字符串,后跟括号表达式的内容。

如果您的文档包含:

This is out.
Bzz. This is in. unBzz.

然后

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

会给你'Bzz。这是.unBzz。'在返回的数组的元素0和'这是在。'在元素1中。试图显示整个数组给出了逗号分隔列表,因为这是JavaScript尝试显示它的方式。

所以 alert($match[1]); 是你所追求的。

答案 5 :(得分: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]);
}