Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式或其他方法从字符串返回javascript对象_Javascript_Json_Regex - Fatal编程技术网

使用正则表达式或其他方法从字符串返回javascript对象

使用正则表达式或其他方法从字符串返回javascript对象,javascript,json,regex,Javascript,Json,Regex,我在Javascript中有一个函数来匹配大括号(包括大括号)之间的文本,以便从不同的帖子中提取JSON字符串。功能如下: function eventObject(value) { var json = text.match(/{([^}]+)}/)[0]; // matches content between curly braces return json; } 输入如下所示: { "host": "Host link..", "info": "Info text...

我在Javascript中有一个函数来匹配大括号(包括大括号)之间的文本,以便从不同的帖子中提取JSON字符串。功能如下:

function eventObject(value) {
   var json = text.match(/{([^}]+)}/)[0]; // matches content between curly braces
   return json;
}
输入如下所示:

{ 
 "host": "Host link..",
 "info": "Info text...",
 "links": [ {"title": "link_title", "url": "link_url"}, {"title": "link_title_2", "url": "link_url_2"} ],
 "category": "campfire"
}
"cooked":"<pre><code class=\"lang-auto\">{\n\"host\": \"host_link\",\n\"info\": \"event_info\",\n\"links\": [{\"title\": \"link_title \", \"url\": \"link_url"},{\"title\": \"link_two_title \", \"url\": \"link_two_url\"} ],\n\"category\": \"category\"\n}\n</code></pre>"}
问题是此文本包含一个嵌套字符串,该字符串带有更多的花括号。在链接中第一次出现闭合括号时,输出将立即剪切。如何防止这种情况发生以获取完整字符串


更新

我意识到我遗漏了一些重要信息来简化我的问题:API响应是一个原始html字符串,其中包含我想作为对象解析的字符串。典型的原始HTML如下所示:

{ 
 "host": "Host link..",
 "info": "Info text...",
 "links": [ {"title": "link_title", "url": "link_url"}, {"title": "link_title_2", "url": "link_url_2"} ],
 "category": "campfire"
}
"cooked":"<pre><code class=\"lang-auto\">{\n\"host\": \"host_link\",\n\"info\": \"event_info\",\n\"links\": [{\"title\": \"link_title \", \"url\": \"link_url"},{\"title\": \"link_two_title \", \"url\": \"link_two_url\"} ],\n\"category\": \"category\"\n}\n</code></pre>"}

您的函数
eventObject
看起来不错,但您不需要
JSON.stringify
,因为它用于序列化JavaScript对象,而您需要向它传递一个字符串。试试这个:

函数eventObject(值){
const doc=new DOMParser().parseFromString(值为“text/html”);
var json=[…doc.queryselectoral('code')].map(code=>code.textContent);//DOMParser在
标记之间提取文本
var final=String(json)。replace(//\n/g,“”)。replace(//[\u2018\u2019]/g,“”)。replace(//[\u201C\u201D]/g,“”);//删除换行符并用直引号替换卷曲引号
//var string=JSON.stringify(最终);
var obj=JSON.parse(final);
返回obj;
}
var值=“'cooked”:“{\n\“host\”:“host\u link\”,\n\“info\”:“event\u info\”,\n\“links\”:[{{“title\”:“link\u title\”,“url\”:“link\u url\”,{“title\”:“link\u两个title\”,“url\”:“link\u两个url\”,\n\”,\n\“category\”,\n\”,\n\“category\”,\n;

console.log(eventObject(value))
JSON和regex不是好朋友。使用解析器,它更简单、更快、更易于维护。@Toto这让我想起了这个答案:D1.使用HTML解析器。2.使用JSON解析器。@Toto HTML解析器可以工作,在我放在更新中的函数中。JSON解析器却不能工作。