Как использовать регулярное выражение для поиска всех номеров дисков, которые находятся в автономном режиме, в строке

#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]));
 

Спасибо всем.