正则表达式获取Script中的Json字符串

正则表达式获取Json字符串
<script type="text/javascript" src="/retail/retail-static/xx/scripts/ac-globalfooter.built.js">script>
<script id="__NEXT_DATA__" type="application/json">
    {"props":{members:{
        "Name":"_test".
        "Age":30,
        "HeadUrl":"http://www.baidu.com"
    }},
    "a":"123",
    "b":"123",
    "c":"123"}
script>
<script type="text/javascript" src="/retail/retail-static/xx/scripts/ac-globalfooter.js">script>
我希望使用正则表达式获取<script id="__NEXT_DATA__" type="application/json">script>中的json对象。我用的是C#。辛苦大家,麻烦大神了。


using System;
using System.Text.RegularExpressions;
namespace HelloWorldApplication
{
   class HelloWorld
   {
      static void Main(string[] args)
      {
         string input =  "<script type=\"text/javascript\" src=\"/retail/retail-static/xx/scripts/ac-globalfooter.built.js\"></script>" +
            "<script id=\"__NEXT_DATA__\" type=\"application/json\">" +
                "{\"props\":{members:{" +
                    "\"Name\":\"_test\"." +
                    "\"Age\":30," +
                    "\"HeadUrl\":\"http://www.baidu.com\""+
                "}}," +
                "\"a\":\"123\"," +
                "\"b\":\"123\"," +
                "\"c\":\"123\"}" +
            "</script>" +
            "<script type=\"text/javascript\" src=\"/retail/retail-static/xx/scripts/ac-globalfooter.js\"></script>";

          string pattern = "(?<=<script id=\"__NEXT_DATA__\" type=\"application/json\">).*?(?=</script>)";

          Regex reg = new Regex(pattern);
          Match match = reg.Match(input);
          string value = match.Groups[0].Value;
          Console.WriteLine("json为:{0}", value);
          Console.ReadKey();
      }
   }
}

const str = `
    <script type="text/javascript" src="/retail/retail-static/xx/scripts/ac-globalfooter.built.js"></script>
    <script id="__NEXT_DATA__" type="application/json">
        {"props":{members:{
            "Name":"_test".
            "Age":30,
            "HeadUrl":"http://www.baidu.com"
        }},
        "a":"123",
        "b":"123",
        "c":"123"}
    </script>
    <script type="text/javascript" src="/retail/retail-static/xx/scripts/ac-globalfooter.js"></script>
`
const reg = /<script[^>]+?\>(?<json>(?:[^<]|\n|\r)+?)<\/script\>/
console.log(reg.exec(str).groups.json)

img

using System.Text.RegularExpressions;

public class Program
{
    public static void Main ()
    {
        // Define a regular expression for repeated words.
        Regex rx = new Regex(@"\{[\s\S]*\}",
          RegexOptions.Compiled | RegexOptions.IgnoreCase|RegexOptions.Multiline);

        // Define a test string.
        string text = "<script type=\"text/javascript\" src=\"/retail/retail-static/xx/scripts/ac-globalfooter.built.js\"></script>\n" +
                "<script id=\"__NEXT_DATA__\" type=\"application/json\">\n" +
                "    {\"props\":{members:{\n" +
                "        \"Name\":\"_test\".\n" +
                "        \"Age\":30,\n" +
                "        \"HeadUrl\":\"http://www.baidu.com\"\n" +
                "    }},\n" +
                "    \"a\":\"123\",\n" +
                "    \"b\":\"123\",\n" +
                "    \"c\":\"123\"}\n" +
                "</script>\n" +
                "<script type=\"text/javascript\" src=\"/retail/retail-static/xx/scripts/ac-globalfooter.js\"></script>\n" +
                "\n";

        // Find matches.
        MatchCollection matches = rx.Matches(text);

        // Report the number of matches found.
        Console.WriteLine("{0} matches found in:\n   {1}",
                          matches.Count,
                          0);

        // Report on each match.
        foreach (Match match in matches)
        {
            GroupCollection groups = match.Groups;
            Console.WriteLine("'{0}'  ",
                              groups[0].Value);
        }
    }
}