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

How to retain escape sequences while extracting strings from json objects in javascript. (Strings are actually regex patterns)

本文关键字:字符串 转义序列 保留 模式 正则表达式 实际上 提取 javascript 中的 对象 json      更新时间:2023-09-26

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

任何线索或解决方法都值得赞赏。谢谢!

你在这里做错了两件事。

首先,您正在尝试构建一个在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抓取是你的主要目标,那么还有更轻量级的替代方案。