我的网站内容有点像下面的内容。我想获得 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包含我的页面源
答案 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。
答案 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;
(包括很多新线路)
作为旁注,点.
不会捕捉换行符号。