Regex match text between tags

javascript, regex

Solution

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

Add `g` (global) flag after:

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

However if you want to get all matched elements, then you need something like this:

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

If an element has attributes, regexp will be:

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

Problem

I have this string: ``` My name is <b>Bob</b>, I'm <b>20</b> years old, I like <b>programming</b>. ``` I'd like to get the text between `b` tags to an array, that is: ``` ['Bob', '20', 'programming'] ``` I tried this `/<b>(.*?)<\/b>/.exec(str)` but it will only get the first text.

Original source

Related problems