【发布时间】:2011-02-20 09:00:19
【问题描述】:
我正要尝试从 XMLHttpRequest 返回的文本中解析一个标签,但我无法让它工作。 我已经在 w3schools 编辑器 (http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_regexp_i) 中对其进行了测试,当文本没有换行符但我卡住时,我可以在其中工作:
<script language="javascript" type="text/javascript">
var req = new XMLHttpRequest();
req.open('GET', 'www.mysite.com/index.html', false);
req.onreadystatechange=function() {
if (req.readyState==4) {
var text = req.responseText;
var tag = /<div class='classdef'>(.*?)<div/gm;
var mt = tag.exec(text);
alert(mt);
return;
}
};
req.send(null);
</script>
警告框最好只写原始正则表达式“/(.*?)
有人指出我做错了什么吗? :)
亲切的问候。
更新的解决方案
感谢您的所有建议,我的代码中似乎不止一件事。我的目标是将数据从另一个页面馈送到页面的一部分。我最终按照您的建议使用 jquery 来实现这一目标:
<div id="IdOfTagToAddTo"></div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script>
<script>
$('#IdOfTagToAddTo').load('somePageInMyDomain.html #SomeIdOfATag');
</script>
我意识到我应该更清楚地说明我的初始目标。 :S。我很抱歉,因为我知道这总是会引起混乱:(。 感谢你们给我的所有指点一百万。从现在开始,我将进入 jQuery 的新世界(至少对我而言 :)) :)。
亲切的问候
【问题讨论】:
-
我建议使用 w3schools 以外的任何网站。 JSfiddle 非常适合测试 javascript。
-
你到底想匹配什么(以及你需要不匹配什么)?您是否必须处理嵌套标签(如果是这样,单个正则表达式可能无法完成这项工作)?你期望
exec会返回什么? -
请参考此处接受的答案:stackoverflow.com/questions/1732348/…
-
我认为这个“答案”是题外话,所以我会把它作为评论发布:你正在做一个同步请求(
open的第三个参数是false),但您使用的是onreadystatechange。这将无法可靠地跨浏览器工作,并且 MDC 明确表示不要将onreadystatechange用于同步请求。我强烈建议使用 asynchronous 请求,因为同步请求会锁定许多浏览器的 UI,从而导致不愉快的用户体验。所以要么这样做(将false更改为true),或者如果请求必须是同步的,不要使用onreadystatechange。
标签: javascript regex xmlhttprequest match