【问题标题】:Regex: how to get contents from tag inner (use javascript)?正则表达式:如何从标签内部获取内容(使用 javascript)?
【发布时间】:2010-04-12 14:45:40
【问题描述】:

页面内容:

aa<b>1;2'3</b>hh<b>aaa</b>..
 .<b>bbb</b>
blabla..

我想得到结果:

1;2'3aaabbb

匹配标签是&lt;b&gt;&lt;/b&gt;

如何使用 javascript 编写这个正则表达式? 谢谢!

【问题讨论】:

    标签: javascript html regex


    【解决方案1】:

    Lazyanno,

    当且仅当

    1. 您已经阅读了SLaks 的帖子(以及previous article he links to),并且
    2. 您完全了解使用正则表达式从 HTML 中提取信息可能会破坏的众多奇妙方式,并且
    3. 相信您的情况不存在任何问题(例如,您可以保证您的输入永远不会包含嵌套、不匹配等。&lt;b&gt;/&lt;/b&gt; 标签或出现 @ 987654326@或&lt;/b&gt;&lt;script&gt;...&lt;/script&gt;或评论&lt;!-- .. --&gt;标签等)
    4. 非常肯定地想要继续进行正则表达式提取

    ...然后使用:

    var str = "aa<b>1;2'3</b>hh<b>aaa</b>..\n.<b>bbb</b>\nblabla..";
    
    var match, result = "", regex = /<b>(.*?)<\/b>/ig;
    while (match = regex.exec(str)) { result += match[1]; }
    
    alert(result);
    

    生产:

    1;2'3aaabbb
    

    【讨论】:

    • @lazyanno,在选择正则表达式或 DOM 解决方案(基于性能标准)之前,请确保同时计时解析“代表性”字符串 多次循环使用这两种方法,然后查看各种浏览器上的实际时间。)
    【解决方案2】:

    You cannot parse HTML using regular expressions.

    相反,您应该使用 Javascript 的 DOM。

    例如(使用 jQuery):

    var text = "";
    $('<div>' + htmlSource + '</div>')
        .find('b')
        .each(function() { text += $(this).text(); });
    

    我将 HTML 包装在 &lt;div&gt; 标记中以查找嵌套和非嵌套 &lt;b&gt; 元素。

    【讨论】:

    • 1732348 是 SO 的 42。它回答了大量的问题。为它投票开始感觉很愚蠢,但见鬼,它不会很快停止成为现实......
    • 郑重声明,您不能可靠地使用正则表达式解析 HTML。如果满足某些条件,则可以使用正则表达式从格式良好的 (X)HTML 中提取信息。
    • 我想使用 javascript 正则表达式来获得我不喜欢解析 HTML 的结果(这很慢)还有其他想法吗?谢谢:)
    • @lazyanno,如果您尝试从页面本身提取信息,则 HTML 已经被浏览器解析,您无需为使用 DOM 支付任何额外的惩罚,例如 SLaks建议
    • 你不能用正则表达式来做到这一点。 (除非你想让它每隔几个小时就神秘地失败一次)
    【解决方案3】:

    这里是一个没有 jQuery 依赖的例子:

    // get all elements with a certain tag name
    var b = document.getElementsByTagName("B");
    
    // map() executes a function on each array member and
    // builds a new array from the function results...
    var text = b.map( function(element) {
      // ...in this case we are interested in the element text
      if (typeof element.textContent != "undefined")
        return element.textContent; // standards compliant browsers
      else
        return element.innerText;   // IE
    });
    
    // now that we have an array of strings, we can join it
    var result = text.join('');
    

    【讨论】:

    • 我认为他的 HTML 不在 DOM 中。
    • @SLaks:嗯……他在帖子中说“页面内容:”。
    • 阅读他对我的回答的评论。
    • @SLaks:我明白了。万岁,提出精确的问题。
    【解决方案4】:
          var regex = /(<([^>]+)>)/ig;
          var bdy="aa<b>1;2'3</b>hh<b>aaa</b>..\n.<b>bbb</b>\nblabla..";
    
          var result =bdy.replace(regex, "");
          alert(result) ;
    

    见:http://jsfiddle.net/abdennour/gJ64g/

    【讨论】:

    • 这个适用于任何标签,正在寻找那个,谢谢
    【解决方案5】:

    只需使用“?”如果您想使用正则表达式,则在您的内部文本生成模式之后的字符。 例如:

    ".*" to "(.*?)"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 2013-07-31
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多