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 に答える