Javascript正则表达式无法正常工作

时间:2013-04-12 08:32:33

标签: javascript regex

我的网站内容有点像下面的内容。我想获得 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包含我的页面源

3 个答案:

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

}

答案 1 :(得分: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。

Demo

答案 2 :(得分:0)

我认为你只是误解了m修饰符。它确实为您提供了几条线上匹配的机会,但您必须处理新线(\r\n\n)。

考虑这个例子:

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

这只会给你“”。因为我们忘了考虑这里的新线。这将抓住所有:<​​/ p>

"</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;

(包括很多新线路)

作为旁注,点.不会捕捉换行符号。