开发者

regex to get contents between <b> tag

开发者 https://www.devze.com 2023-04-01 11:19 出处:网络
I have used following regex to get only contents between <b> and </b> tags. var bonly = defaultVal.match(\"<b>(.*?)</b>\");

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 compulsory but it may have description or may not have description.


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 complicated 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 complex parsing) and then use DOM access methods to fetch the info you want.

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


try this regexp

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

精彩评论

暂无评论...
验证码 换一张
取 消