正则表达式匹配标记之间的文本

我有一根绳子:

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),但它只会得到第一个文本。

139804 次浏览
/<b>(.*?)<\/b>/g

Regular expression visualization

在以下位置加入 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"]

如果元素具有属性,regexp 将是:

/<b [^>]+>(.*?)<\/b>/g.exec(str)

改为使用 火柴和 g 标志。

str.match(/<b>(.*?)<\/b>/g);
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"]

试试看

str.match(/<b>(.*?)<\/b>/g);