我有这个字符串:
My name is <b>Bob</b>, I'm <b>20</b> years old, I like <b>programming</b>.
我想将标签中的文本存入数组中,即:
['Bob', '20', 'programming']
我尝试过这个/<b>(.*?)<\/b>/.exec(str)
,但它只会获取第一个文本。
我有这个字符串:
My name is <b>Bob</b>, I'm <b>20</b> years old, I like <b>programming</b>.
我想将标签中的文本存入数组中,即:
['Bob', '20', 'programming']
我尝试过这个/<b>(.*?)<\/b>/.exec(str)
,但它只会获取第一个文本。
/<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)
["<b>Bob</b>", "Bob"]
? - wong2var 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"]
使用match代替,并加上全局标志g。
str.match(/<b>(.*?)<\/b>/g);
.
不匹配换行符。您可以将该点替换为[\s\S]
,然后事情应该按您的预期工作。请注意,尽管这对于简单情况有效,但这并不是完美的解决方案(例如嵌套标记将无法正常工作)。通常不建议使用RegExp来解析HTML。如果您需要任意字符串,请尝试使用DOMParser并在结果上使用querySelectorAll
等内容。 - Bali Balo请尝试
str.match(/<b>(.*?)<\/b>/g);