1

我是正则表达式的新手。我的变量包含:

<b><font color="#32748">My string:</font></b>
<big>  My value </big>
<br>

My string它在变量中的字符串随着和My value(随机值)的变化而重复多次。我需要在新变量中找到My value具体My string并存储(值)。有时该字符串有空格,有时没有空格。

4

3 回答 3

1

你真的应该尽量避免使用正则表达式来解析 HTML。尤其是在每个浏览器中都内置了非常强大的工具。

这是一个没有正则表达式的解决方案,我觉得它很简单。

下面是它的工作原理:

  • 我们创建一个 HTML 元素
  • 浏览器已经包含一个非常好的 HTML 解析器 :) 它可以像处理网页一样为我们处理名称中的空格、转义实体和部分 HTML 等边缘情况。我们将 HTML 转储到元素中。
  • 我们可以使用 querySelector 语法来查询元素,如果你是个老手,我们可以使用更简单的 getElementsByTagName。
  • 我们使用该textContent属性来获取文本。

实际代码:

var test = '<b><font color="#32748">My string:</font></b><big>  My value </big><br>';

// we create an empty element and put the html in it
var div = document.createElement("div");
div.innerHTML = test;

// get the text from the font tag, as you asked for.
var test = div.querySelector("font").textContent; 

小提琴

请注意,<font>标签已弃用,不应在新代码中使用。我会考虑查看当前的 HTML5 规范并了解现代 HTML 中的工作方式。

注意2,在oldIE中你不能使用textContent,所以你可以做innerHTMLinnerText

于 2013-08-16T13:16:07.000 回答
1
var myRegEx = /<b><font color="#[0-9]{3,6}">(.+)<\/font><\/b>[\r\n]{0,2}<big>(.+)<\/big>[\r\n]{0,2}<br>/i;
var myString = '<b><font color="#32748">My string:</font></b>\n<big>  My value     </big>\n<br>';
var myResult = myString.match(myRegEx);
console.log(myResult[1] + " | " + myResult[2]);

RegEx:
[0-9]匹配 0-9 范围内的任何单个字符。
{3,6}匹配前一个令牌的 3 到 6 个。
(.+)捕获组。
.匹配任何字符,如果 dotall 为 false,则换行符除外。
+匹配 1 个或多个前面的标记。
\n换行符。
\r回车符。
[\r\n]匹配集合中的任何单个字符。
{0,2}匹配前一个标记的 0 到 2。

现在只需将它应用到您的代码中。您可以在http://gskinner.com/RegExr/对其进行测试。

于 2013-08-16T13:04:28.213 回答
-1

使用 jquery 来做这样的事情:

var t = '<b><font color="#32748">My string:</font></b><big>  My value </big><br><b><font color="#32748">My string1:</font></b><big>  My value1 </big><br>';

var data = $('big', $('<div/>').append(t)).map(function() {
  return $.trim($(this).text());
});

console.log(data[0]);  // My value 
console.log(data[1]);  // My value1
于 2013-08-16T13:21:18.283 回答