最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - regex to get contents between <b> tag - Stack Overflow

programmeradmin3浏览0评论

I have used following regex to get only contents between <b> and </b> tags.

var bonly = defaultVal.match("<b>(.*?)</b>");

but it did not worked. I'm not getting proper result. Sample string I'm using regex on:

<b>Item1</b>: This is item 1 description.

<b>Item1</b>: This is item 1 description.<b>Item2</b>: This is item 2 description.

<b>Item1</b>: <b>Item2</b>: This is item 2 description. <b>Item3</b>: This is item 3 description.<b>Item4</b>:  

<b>Item1</b>: This is item 1 description.<b>Item2</b>: This is item 2 description.    <b>Item3</b>: This is item 3 description.<b>Item4</b>: 

Here item name is pulsory but it may have description or may not have description.

I have used following regex to get only contents between <b> and </b> tags.

var bonly = defaultVal.match("<b>(.*?)</b>");

but it did not worked. I'm not getting proper result. Sample string I'm using regex on:

<b>Item1</b>: This is item 1 description.

<b>Item1</b>: This is item 1 description.<b>Item2</b>: This is item 2 description.

<b>Item1</b>: <b>Item2</b>: This is item 2 description. <b>Item3</b>: This is item 3 description.<b>Item4</b>:  

<b>Item1</b>: This is item 1 description.<b>Item2</b>: This is item 2 description.    <b>Item3</b>: This is item 3 description.<b>Item4</b>: 

Here item name is pulsory but it may have description or may not have description.

Share Improve this question asked Aug 30, 2011 at 4:59 Harry JoyHarry Joy 59.7k30 gold badges164 silver badges210 bronze badges 1
  • 3 Regex is not a good tool for HTML, see stackoverflow./questions/1732348/… – cobbal Commented Aug 30, 2011 at 5:06
Add a ment  | 

3 Answers 3

Reset to default 7

Why don't you skip regex and try...

var div = document.createElement('div');

div.innerHTML = str;

var b = div.getElementsByTagName('b');

for (var i = 0, length = b.length; i < length; i++) {
    console.log(b[i].textContent || b[i].innerText);
}

jsFiddle.

There are a zillion questions/answers here on SO about using regex to match HTML tags. You can probably learn a lot with some appropriate searching.

You may want to start by turning your regular expression into a regular expression:

var defaultVal = "<b>Item1</b>: This is item 1 description.";
var bonly = defaultVal.match(/<b>(.*?)<\/b>/);
if (bonly && (bonly.length > 1)) {
    alert(bonly[1]);    // alerts "Item1"
}

You may also need to note that regular expressions are not well suited for HTML matching because there can be arbitrary strings as attributes on HTML tags that can contain characters that can really mess up the regex match. Further, line breaks can be an issue in some regex engines. Further capitalization can mess you up. Further, an extra space here or there can mess you up. Some of this can be accounted for with a more plicated regex, but it still may not be the best tool.

Depending upon the context of what you're trying to do, it may be easier to create actual HTML objects with this HTML (letting the browser do all the plex parsing) and then use DOM access methods to fetch the info you want.

It works here: http://jsfiddle/jfriend00/Man2J/.

try this regexp

var bonly = defaultVal.match(/<([A-z0-9]*)\b[^>]*>(.*?)<\/\1>/)
发布评论

评论列表(0)

  1. 暂无评论