0

我的网站内容如下。我想获得activategoldodgbrm

App Namespace</span></div><div class="fsm fcb">activategoldodgbrm</div>

我尝试了下面的代码,但它说匹配不起作用。

var pattern = /App Namespace<\/span><\/div><div class="fsm fcb">(.*?)<\/div>/gm;
var match;
while (match = pattern.exec(src)) { 

alert(match[1]);

}

注意:src 包含我的页面源

4

3 回答 3

0

你没有分配任何匹配的东西。

var a;
if(a==1){...}
alert(a); // a is null

所以试试这个

var pattern = /App Namespace<\/span><\/div><div class="fsm fcb">(.*?)<\/div>/gm;
var match;
while (match = pattern.exec(src)) { // using "=" instead of "=="

alert(match[1]);

}
于 2013-04-12T08:44:37.637 回答
0

请从关于 == 和 = 运算符的答案中抽象出来,这是一些误解。首先,我认为您不需要如此复杂的正则表达式。其次,您不需要运行循环。检查这个:

var src = 'App Namespace</span></div><div class="fsm fcb">activategoldodgbrm</div>';
alert(/class="fsm fcb">(.+?)</gm.exec(src)[1]);

最后,如果您的 src 实际上是 DOM 节点,最好使用 DOM API 来查找节点并获取它的 innerHTML。

演示

于 2013-04-12T08:49:46.113 回答
0

我认为您只是误解了m修饰符。它确实为您提供了在多行上匹配某些内容的机会,但您必须处理新行(\r\n\n)。

考虑这个例子:

"</span>\n</div>".match(/.*/m);

这只会给你“”。因为我们忘记考虑这里的新行了。这将抓住所有:

"</span>\n</div>".match(/(.|\r?\n)*/m);

所以......因为我们真的不知道里面有什么src,我会尝试更通用:

var pattern = /App Namespace(?:\r?\n)*<\/span>(?:\r?\n)*<\/div>(?:\r?\n)*<div class="fsm fcb">(?:\r?\n)*(.*?)(?:\r?\n)*<\/div>/gm;

(包括许多新行捕捉)

作为旁注,该点.不会捕获换行符。

于 2013-04-12T08:59:01.527 回答