【问题标题】:Javascript RegEx and XMLHttpRequestJavascript RegEx 和 XMLHttpRequest
【发布时间】: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


【解决方案1】:

扩展 gor 的答案。

使用 jQuery:

  $(req.responseText).find('div.classdef').text()

使用拆分(没有正则表达式),有点神秘:

req.responseText.split("<div class='classdef'>")[1].split('</div>')[0]

【讨论】:

  • 花了一段时间,因为我以前从未做过任何 jquery,但我最终使用了 load()。我已经在原始问题中编写了完整的解决方案,并将您的帖子标记为答案:)。谢谢你把我指向 jquery,勇敢的新世界前面:)。
【解决方案2】:

exec 方法返回数组。第一个(0 索引)是您的匹配项,第二个(索引 1)是您的组的匹配项。您应该从中获取第二个元素。

var mt = tag.exec(text);
alert(mt[1]);

并在您的正则表达式中添加斜杠。

但是用正则表达式解析 html 是非常糟糕的主意。使用其他东西,例如 jquery。

请记住,您不能向其他域中的站点发出 XMLHttpRequest。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多