有兩個文字檔 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>
/-?\d+(\.\d+)?/g:
-? 可選負號\d+ 一位以上數字(\.\d+)? 可選小數點與小數位g 全域匹配"012" → 12。(x,y)=>x-y:確保數值排序而非字典序。async function processFiles(urlA, urlB) {
const [textA, textB] = await Promise.all([
fetch(urlA).then(r => r.text()),
fetch(urlB).then(r => r.text())
]);
// 套用上述邏輯...
}
match 會一次產生所有匹配陣列,記憶體佔用與匹配數成正比。使用 indexOf 定位、substring 擷取、正則 match 提取數值、map(Number).sort() 找極值,是瀏覽器端處理此類文字分析任務的標準高效流程。