2010-04-12 61 views

回答

9

Lazyanno

当且仅当

  1. 阅读SLaks的发布(如以及previous article he links to)和
  2. 你完全了解纷繁奇妙的方法,使使用正则表达式可以打破从HTML中提取信息,并
  3. 相信没有一个关注你的情况应用(例如你能保证你的投入绝不会包含嵌套的,不匹配等<b>/</b>标签或<b>事件或内<script>...</script></b>或评论<!-- .. -->标签等)
  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 
+0

很酷! 谢谢! :))) – Koerr 2010-04-12 17:28:25

+0

@lazyanno,在选择正则表达式或DOM解决方案之前(基于性能标准),确保**时间都**(**解析一个“代表性”字符串**两种方法几个次,在一个循环中,并查看**各种浏览器**上**的实际时机**)。 – vladr 2010-04-12 17:55:07

8

You cannot parse HTML using regular expressions

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

例如(使用jQuery):

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

我包裹在一个<div>标记的HTML找到两个嵌套和非嵌套<b>元件。

+0

1732348是SO的42。它回答了大量的问题。 upvoting开始感到愚蠢,但哎呀,它不会停止很快成为现实... – 2010-04-12 14:51:32

+3

为了记录,你不能**可靠** **使用正则表达式解析HTML。如果符合某些条件,则可以使用正则表达式从格式良好的(X)HTML中提取信息*。 – vladr 2010-04-12 14:52:15

+0

我想用JavaScript的正则表达式来得到结果 我不喜欢解析HTML(这很慢) 任何其他的想法? 谢谢:) – Koerr 2010-04-12 14:53:32

2

这里是一个没有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(''); 
+0

我不认为他的HTML是在DOM中。 – SLaks 2010-04-12 15:06:17

+0

@SLaks:嗯......他在帖子中说“网页内容:”。 – Tomalak 2010-04-12 15:11:33

+0

阅读他对我的答案的评论。 – SLaks 2010-04-12 15:16:30

2
 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/

+0

这一个适用于任何标签,正在寻找,谢谢 – Flion 2017-05-23 09:33:35

1

只需使用如果要使用Regular experssions,则在为内部文本生成模式之后的字符。例如: :

".*" to "(.*?)" 
相关问题