我有一个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对象中具有正确的格式。
任何线索或变通方法都表示赞赏。谢谢!
答案 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抓取是你的主要目标,那么有更轻量级的替代品。