0

我有一个 JSON 对象,如下所示:

    var jsonObject = {"regex":"<span class=\"Value\">\\$(.+?)<\\/span>"};

我的目标是使用这个正则表达式从 html 文档中抓取一个值。

    var match = html.match(new RegExp(jsonObject.regex, 'i'));

然而,这会返回一个错误。问题似乎是正则表达式字符串中的转义序列在字符串 jsonObject.regex 中丢失了

对 jsonObject.regex 的调用返回

    < span class="Value">\$(.+?)<\ /span>

(像 \" 和 \\ 这样的转义序列丢失了)

我可以使用 javascript 替换相应的字符,但这似乎效率低下,因为我已经在 json 对象中有正确的格式。

任何线索或解决方法表示赞赏。谢谢!

4

1 回答 1

0

你在这里做错了两件事。

首先,您正在尝试构建一个在 HTML 上使用任意正则表达式的程序。不要那样做。您可以在客户端使用 DOM,您应该使用可用的选择器引擎之一。示例包括内置浏览器document.querySelectorAll()Sizzle(也是 jQuery 的一部分)、NWMatcher或基于 XPath 的选择器引擎,如XPath.js

然后,您显然不会使用 JSON 序列化程序在服务器端构建您的 JSON 字符串,否则不会在客户端发生诸如混乱的转义之类的事情。

最后,您在第一个代码示例中拥有的不是 JSON。它是一个 JavaScript 对象字面量。JSON始终是一个字符串:

'{"regex":"<span class=\"Value\">\\$(.+?)<\\/span>"}'

在 jQuery 中选择您似乎想要的内容将变得如此简单

var value = $("span.value").text();

但正如我所说,你不一定要使用 jQuery,如果 HTML 抓取是你的主要目标,还有更轻量级的替代品。

于 2012-05-14T08:51:55.723 回答