69

我有这个字符串:

My name is <b>Bob</b>, I'm <b>20</b> years old, I like <b>programming</b>.

我想将b标签之间的文本放到一个数组中,即:

['Bob', '20', 'programming']

我试过了,/<b>(.*?)<\/b>/.exec(str)但它只会得到第一个文本。

4

4 回答 4

136
/<b>(.*?)<\/b>/g

正则表达式可视化

在以下之后添加g全局)标志:

/<b>(.*?)<\/b>/g.exec(str)
             //^-----here it is 

但是,如果你想获得所有匹配的元素,那么你需要这样的东西:

var str = "<b>Bob</b>, I'm <b>20</b> years old, I like <b>programming</b>.";

var result = str.match(/<b>(.*?)<\/b>/g).map(function(val){
   return val.replace(/<\/?b>/g,'');
});
//result -> ["Bob", "20", "programming"] 

如果元素具有属性,则正则表达式将是:

/<b [^>]+>(.*?)<\/b>/g.exec(str)
于 2012-07-21T12:09:35.317 回答
13
var root = document.createElement("div");

root.innerHTML = "My name is <b>Bob</b>, I'm <b>20</b> years old, I like <b>programming</b>.";

var texts = [].map.call( root.querySelectorAll("b"), function(v){
    return v.textContent || v.innerText || "";
});

//["Bob", "20", "programming"]
于 2012-07-21T12:13:20.897 回答
11

改用match和 g 标志。

str.match(/<b>(.*?)<\/b>/g);
于 2012-07-21T12:12:39.387 回答
3

尝试

str.match(/<b>(.*?)<\/b>/g);
于 2012-07-21T12:13:37.157 回答