Подтвердить что ты не робот

Regex сопоставляет текст между тегами

У меня есть эта строка:

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), но он получит только первый текст.

4b9b3361

Ответ 1

/<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"] 

Ответ 2

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"]

Ответ 3

Используйте вместо этого совпадение и флаг g.

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

Ответ 4

Попробуйте

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