正则表达式获取<b>标签</b>之间的内容

时间:2011-08-30 04:59:54

标签: javascript regex

我使用了以下正则表达式来仅获取<b></b>标记之间的内容。

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

但它没有奏效。我没有得到正确的结果。我正在使用正则表达式的示例字符串:

<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>: 

此处项目名称是强制性的,但可能有描述或可能没有描述。

3 个答案:

答案 0 :(得分:7)

为什么不跳过正则表达式并尝试...

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

答案 1 :(得分:2)

关于使用正则表达式来匹配HTML标签,这里有很多问题/答案。通过适当的搜索,你可以学到很多东西。

您可能希望首先将正则表达式转换为正则表达式:

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

您可能还需要注意正则表达式不适合HTML匹配,因为HTML标记上的任意字符串可能包含可能真正搞乱正则表达式匹配的字符。此外,换行符可能是某些正则表达式引擎中的问题。进一步的资本化会让你感到困惑。此外,这里或那里的额外空间会让你感到困惑。其中一些可以用更复杂的正则表达式来解释,但它仍然可能不是最好的工具。

根据您尝试执行的操作的上下文,使用此HTML创建实际的HTML对象可能更容易(让浏览器执行所有复杂的解析),然后使用DOM访问方法获取您想要的信息

它在这里工作:http://jsfiddle.net/jfriend00/Man2J/

答案 2 :(得分:1)

试试这个正则表达式

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