首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript 文字檔案內容篩選:提取關鍵字後數值並找最大最小值

     編輯:程式設計綜合問答

需求描述

有兩個文字檔 A(內容多)與 B(內容少)。需在 A 中找到 B 內容第一次出現的位置,擷取其後的所有字元,從中提取所有數值(含負數、小數),並找出最大值與最小值。

完整解決方案

<script>
// 模擬檔案內容(實際可用 fetch/FileReader 讀取)
var a = 'afefjajfldjofeoajlxlxl afjefoaoa xxoo 123,343,34,3,4,,2,,-12323,-1,,1,1,1,24,2,fefeaa,45,5,5,6,6,67,7,fefe7,7,2258833,,334343,,22,,23,3';
var b = 'xxoo';

// 1. 找到 b 在 a 中的位置
var idx = a.indexOf(b);
if (idx === -1) {
    console.log('A 中找不到 B 內容');
} else {
    // 2. 擷取 b 之後的子字串
    var after = a.substring(idx + b.length);
    
    // 3. 正則提取所有數值(整數、負數、小數)
    // -?\d+(\.\d+)? 匹配:可選負號 + 數字 + 可選小數部分
    var nums = after.match(/-?\d+(\.\d+)?/g);
    
    if (nums && nums.length > 0) {
        // 4. 轉為數值陣列並排序
        var numVals = nums.map(Number);
        numVals.sort((x, y) => x - y); // 升冪
        
        console.log('最大值:', numVals[numVals.length - 1]);
        console.log('最小值:', numVals[0]);
        console.log('所有數值:', numVals);
    } else {
        console.log('B 後方無數值');
    }
}
</script>

關鍵技術點

  1. indexOf + substring:定位關鍵字並擷取後續內容,O(n) 時間複雜度。
  2. 正則表達式 /-?\d+(\.\d+)?/g:
    • -? 可選負號
    • \d+ 一位以上數字
    • (\.\d+)? 可選小數點與小數位
    • g 全域匹配
  3. map(Number):將字串陣列轉為數值陣列,自動處理 "012" → 12。
  4. 排序比較函式 (x,y)=>x-y:確保數值排序而非字典序。

檔案讀取整合 (Fetch API)

async function processFiles(urlA, urlB) {
    const [textA, textB] = await Promise.all([
        fetch(urlA).then(r => r.text()),
        fetch(urlB).then(r => r.text())
    ]);
    // 套用上述邏輯...
}

效能考量

  • 大檔案(>10MB)建議使用 Stream API 或 Web Worker 避免阻塞主執行緒。
  • 正則 match 會一次產生所有匹配陣列,記憶體佔用與匹配數成正比。
  • 若僅需最大/最小值,可邊解析邊比較,無需儲存完整陣列(空間 O(1))。

總結

使用 indexOf 定位、substring 擷取、正則 match 提取數值、map(Number).sort() 找極值,是瀏覽器端處理此類文字分析任務的標準高效流程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved