如何在javascript中从json对象中提取字符串时保留转义序列。 (字符串实际上是正则表达式)

时间:2012-05-14 08:12:47

标签: javascript regex json web-scraping

我有一个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对象中具有正确的格式。

任何线索或变通方法都表示赞赏。谢谢!

1 个答案:

答案 0 :(得分: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抓取是你的主要目标,那么有更轻量级的替代品。