You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#从混合数据的ReactJS文件中提取JSON获取版本号

从混合JS文件中提取版本号的规范C#实现

针对你要从React打包后的JS文件中提取shortVersion版本号的需求,之前的字符串截取方法可靠性不足,这里提供两种更规范的实现方式:


方法1:正则匹配完整JSON片段 + JSON解析器

这种方法先通过正则定位包含shortVersion的JSON键值对结构,再用官方JSON解析器处理,准确性更高,能适配压缩后的JS格式:

实现代码

using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Text.Json;

public static string ExtractShortVersion(string pathToFile)
{
    // 匹配固定格式的shortVersion键值对(适配压缩后的JS语法)
    var versionRegex = new Regex(@"{""shortVersion"":""([^""]+)""}", RegexOptions.Compiled);
    
    // 一次性读取整个文件内容(压缩后的JS通常是单行,按行读会失效)
    var jsContent = File.ReadAllText(Directory.GetFiles(pathToFile, "main.*.js")[0]);
    
    var matchResult = versionRegex.Match(jsContent);
    if (matchResult.Success)
    {
        // 直接捕获版本号
        return matchResult.Groups[1].Value;
        
        // 若需完整解析JSON对象,可启用以下代码:
        // var jsonFragment = matchResult.Value;
        // var versionObj = JsonSerializer.Deserialize<VersionModel>(jsonFragment);
        // return versionObj.ShortVersion;
    }
    
    return null; // 未找到目标时返回null
}

// 用于反序列化的实体类
public class VersionModel
{
    [JsonPropertyName("shortVersion")]
    public string ShortVersion { get; set; }
}

方法2:精准字符串定位截取

如果JS文件中版本号的格式固定(比如"shortVersion":"vX.X.X"),可以优化原有逻辑,只提取版本号部分:

实现代码

using System;
using System.IO;

public static string GetShortVersion(string pathToFile)
{
    string[] targetFiles = Directory.GetFiles(pathToFile, "main.*.js");
    if (targetFiles.Length == 0) return null;
    
    var content = File.ReadAllText(targetFiles[0]);
    var keyword = "\"shortVersion\":\"";
    int startPos = content.IndexOf(keyword);
    
    if (startPos == -1) return null;
    
    // 定位到版本号起始位置
    startPos += keyword.Length;
    // 找到版本号结尾的双引号位置
    int endPos = content.IndexOf('"', startPos);
    
    return endPos > startPos ? content.Substring(startPos, endPos - startPos) : null;
}

关键优化说明

  • 一次性读取文件:压缩后的React JS文件基本是单行结构,按行读取会导致无法定位目标内容,一次性读取更可靠。
  • 避免冗余内容:两种方法都精准定位版本号的边界,不会截取到后续无关的JS代码片段。
  • 可扩展性:方法1支持后续扩展提取更多JSON字段,方法2更轻量高效,适合固定格式的场景。

内容的提问来源于stack exchange,提问作者Tiffany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:45:58