Javascript jQuery在一个非常大的字符串中提取json子字符串

Javascript jQuery在一个非常大的字符串中提取json子字符串,javascript,jquery,json,Javascript,Jquery,Json,我得到一个ajax字符串响应,如下所示: <font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'> <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000;

我得到一个ajax字符串响应,如下所示:

<font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
    <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined index:  in C:\wamp\www\form.php on line <i>464</i></th></tr>
    <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
    <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
    <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0008</td><td bgcolor='#eeeeec' align='right'>274560</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\wamp\www\Example\wp-admin\admin-ajax.php' bgcolor='#eeeeec'>..\admin-ajax.php<b>:</b>0</td></tr>
    <tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.8826</td><td bgcolor='#eeeeec' align='right'>38298888</td><td bgcolor='#eeeeec'>do_action(  )</td><td title='C:\wamp\www\Example\wp-admin\admin-ajax.php' bgcolor='#eeeeec'>..\admin-ajax.php<b>:</b>85</td></tr>
    <tr><td bgcolor='#eeeeec' align='center'>3</td><td bgcolor='#eeeeec' align='center'>0.8827</td><td bgcolor='#eeeeec' align='right'>38300392</td><td bgcolor='#eeeeec'><a href='http://www.php.net/function.call-user-func-array:{C:\wamp\www\Example\wp-includes\plugin.php:505}' target='_new'>call_user_func_array:{C:\wamp\www\Example\wp-includes\plugin.php:505}</a>
        (  )</td><td title='C:\wamp\www\Example\wp-includes\plugin.php' bgcolor='#eeeeec'>..\plugin.php<b>:</b>505</td></tr>
    <tr><td bgcolor='#eeeeec' align='center'>4</td><td bgcolor='#eeeeec' align='center'>0.8827</td><td bgcolor='#eeeeec' align='right'>38300560</td><td bgcolor='#eeeeec'>Example_Post->ajax_Example_posting_form(  )</td><td title='C:\wamp\www\Example\wp-includes\plugin.php' bgcolor='#eeeeec'>..\plugin.php<b>:</b>505</td></tr>
    <tr><td bgcolor='#eeeeec' align='center'>5</td><td bgcolor='#eeeeec' align='center'>0.8827</td><td bgcolor='#eeeeec' align='right'>38301552</td><td bgcolor='#eeeeec'>Example_Post->Example_form_submitting(  )</td><td title='C:\wamp\www\form.php' bgcolor='#eeeeec'>..\Example-frontend-form.php<b>:</b>116</td></tr>
</table></font>
<br />
<font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
    <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Undefined index: name in C:\wamp\www\form.php on line <i>475</i></th></tr>
    <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
    <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
    <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0008</td><td bgcolor='#eeeeec' align='right'>274560</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='C:\wamp\www\Example\wp-admin\admin-ajax.php' bgcolor='#eeeeec'>..\admin-ajax.php<b>:</b>0</td></tr>
    <tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.8826</td><td bgcolor='#eeeeec' align='right'>38298888</td><td bgcolor='#eeeeec'>do_action(  )</td><td title='C:\wamp\www\Example\wp-admin\admin-ajax.php' bgcolor='#eeeeec'>..\admin-ajax.php<b>:</b>85</td></tr>
    <tr><td bgcolor='#eeeeec' align='center'>3</td><td bgcolor='#eeeeec' align='center'>0.8827</td><td bgcolor='#eeeeec' align='right'>38300392</td><td bgcolor='#eeeeec'><a href='http://www.php.net/function.call-user-func-array:{C:\wamp\www\Example\wp-includes\plugin.php:505}' target='_new'>call_user_func_array:{C:\wamp\www\Example\wp-includes\plugin.php:505}</a>
        (  )</td><td title='C:\wamp\www\Example\wp-includes\plugin.php' bgcolor='#eeeeec'>..\plugin.php<b>:</b>505</td></tr>
    <tr><td bgcolor='#eeeeec' align='center'>4</td><td bgcolor='#eeeeec' align='center'>0.8827</td><td bgcolor='#eeeeec' align='right'>38300560</td><td bgcolor='#eeeeec'>Example_Post->ajax_Example_posting_form(  )</td><td title='C:\wamp\www\Example\wp-includes\plugin.php' bgcolor='#eeeeec'>..\plugin.php<b>:</b>505</td></tr>
    <tr><td bgcolor='#eeeeec' align='center'>5</td><td bgcolor='#eeeeec' align='center'>0.8827</td><td bgcolor='#eeeeec' align='right'>38301552</td><td bgcolor='#eeeeec'>Example_Post->Example_form_submitting(  )</td><td title='C:\wamp\www\form.php' bgcolor='#eeeeec'>..\Example-frontend-form.php<b>:</b>116</td></tr>
</table></font>
{"redirect_to":"false","show_message":true,"message":"<div class=\"notification alert-success\"><p>Post updated successfully<\/p><a href=\"#\" class=\"close-btn\">\u00d7<\/a><\/div><br \/>"}

(!)注意:未定义索引:在第464行的C:\wamp\www\form.php中
调用堆栈
#时间记忆功能定位
10.0008274560{main}()..\admin ajax.php:0
20.882638298888do_action()..\admin ajax.php:85
30.882738300392
()..\plugin.php:505
40.882738300560示例发布->ajax示例发布表单()..\plugin.php:505
50.882738301552示例发布->示例表单提交()..\Example frontend form.php:116

(!)注意:第475行C:\wamp\www\form.php中的未定义索引:name 调用堆栈 #时间记忆功能定位 10.0008274560{main}()..\admin ajax.php:0 20.882638298888do_action()..\admin ajax.php:85 30.882738300392 ()..\plugin.php:505 40.882738300560示例发布->ajax示例发布表单()..\plugin.php:505 50.882738301552示例发布->示例表单提交()..\Example frontend form.php:116 {“重定向到”:“false”,“显示消息”:true,“消息”:“Post更新成功\u00d7
但要大得多。我想提取json对象(您可以在最后几行看到它,但它并不总是在字符串的底部),以便在
$.parseJSON
jQuery方法中使用它


有谁能帮我做到这一点吗?

使用此正则表达式可以在标记中的任何位置查找

var regex = '^\{\".*?\"\}';

解决问题的方法不止一种。要了解根本原因(如果您不想确保在使用变量之前确实设置了变量),可以使用以下两个选项之一:

--

找到你的
php.ini
文件并更新你的
error\u reporting
设置,如下所示:

error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR

--

如果要禁用每页,请修改正在访问的PHP文件,并在
标记(在
C:\wamp\www\form.PHP
文件中)顶部的某个位置包含此行:


我会使用这个正则表达式:
/(\{\“*?:.*?\“\})/
这将为您提供匹配组中的json

此处演示:

像这样使用:

var regx = /(\{\".*?:.*?\"\})/g,
    match = "";
while (match = regex.exec(yourString) !== null) {
    var json = $.parseJSON(match[0]);
    //use the json
}

也许您最好的选择是构建一个正则表达式,以适合您想要提取的JSON,因为HTML代码告诉您存在错误!真的很抱歉。你应该注意它们并解决潜在的问题,但如果你在PHP中关闭警告,那么应该返回纯JSON响应。你应该|必须修复PHP部分中的错误(我认为这是你的wamp,因此你可以控制代码)请查看此线程中已接受的答案,我会对此进行投票,但有一个更好的解决方案,可以解决OP试图解决的根本问题。如果我使用此代码,错误和通知是否会记录到错误日志?@Engr.MTH,我不相信,但如果您愿意,我建议您检查自己当然。非常感谢您的代码做得很好,解决了所有问题,是的,错误和通知记录到错误日志。@Engr.MTH我可能还应该提到第一个方法设置了您希望报告的异常,第二个方法设置了您不希望报告的异常。使用第二个选项只能强制抑制E_通知警告。致命错误仍将正常运行。另外,感谢您以特定的日志记录行为进行报告:)
var regx = /(\{\".*?:.*?\"\})/g,
    match = "";
while (match = regex.exec(yourString) !== null) {
    var json = $.parseJSON(match[0]);
    //use the json
}