#node.js #regex
Вопрос:
Я использую nodejs для выполнения определенного сценария cmd, однако выходные данные cmd представлены в строковом формате, и мне нужно получить доступ к номерам дисков, которые имеют статус автономных.
например, строка, в которой мне нужно выполнить поиск, является
«rnMicrosoft DiskPart версия 10.0.19041.610rnrnCopyright (C) Корпорация Майкрософт.rНе компьютер: РАБОЧИЙ СТОЛ-HACFL5Arnrn Диск ### Размер статуса Свободный Dyn Gptrn ——— ————- ——- ——- — —rn Диск 0 Онлайн 238 ГБ 1024 КБ *rn Диск 1 Онлайн 14 ГБ 9 ГБ *rnrnDisk 1 теперь является выбранным диском.rn»
Используя следующее регулярное выражение, я получаю информацию о том, что в сети есть 2 диска, но как мне узнать их номера дисков? Мне нужен вывод регулярного выражения для хранения всех автономных номеров дисков в массиве.
var str = JSON.stringify(stdout);
var matches = str.match( /Online/g )
console.log("matches is: ", matches)
совпадения: [ «Онлайн», «Онлайн» ]
Комментарии:
1.Вы могли бы использовать группу
bDisk (d ) Onlineb
захвата regex101.com/r/O208OB/1 Обратитеoffline
внимание, что в тексте этого нет.2. Вы были плохим примером, так как были только онлайн-диски, спасибо за быстрый ответ. Я попробую 🙂
3. Как выглядит строка с автономными дисками?
4. Точно так же, но вместо «Онлайн» его «Оффлайн»
5. Затем используйте
bDisk (d ) Offlineb
см. jsfiddle.net/cdkvhoxe
Ответ №1:
Это сработало бы:
d (?= Offline)
var str = `Microsoft DiskPart version 10.0.19041.610
Copyright (C) Microsoft Corporation.
On computer: DESKTOP-HACFL5A
Disk ### Status Size Free Dyn Gpt
-------- ------------- ------- ------- --- ---
Disk 0 Offline 238 GB 1024 KB *
Disk 1 Online 14 GB 9 GB *
Disk 1 is now the selected disk.`;
var matches = str.match( /d (?= Offline)/g );
console.log("matches is: ", matches)
Ответ №2:
Заставил его работать со следующим кодом
var str = JSON.stringify(stdout);
const t = str.replace(/s /g, ' ').trim()
const regex = /bDisk (d ) Onlineb/g;
console.log(Array.from(t.matchAll(regex), m => m[1]));
Спасибо всем.