Обратите внимание, что ваш первый шаблон может быть записан как \b\d+(?:\.\d+)?%id\b
, используя одну \d+
соответствующую 1+ цифру, где вы должны экранировать точку, чтобы буквально соответствовать ей.
Если значение также может быть без десятичную часть, вы можете сделать это необязательным
Второй шаблон можно записать как \b\d+k free\b
, используя один \d+
, чтобы также соответствовать 1+ цифрам. Вы можете использовать границы слов, чтобы слово не входило в большее слово и получать частичные совпадения.
Чтобы получить значение cuic_reporting , вы можете использовать группу захвата и использовать повторяющаяся группа для совпадения значений между% CPU и cuic_reporting.
(\d+(?:\.\d+)?)(?:[^\S\r\n]+\S+){2}[^\S\r\n]+cuic_reporting\b
Regex demo
let str = ` top - 02:51:10 up 176 days, 23:47, 1 user, load average: 0.13, 0.09, 0.07
Tasks: 208 total, 1 running, 207 sleeping, 0 stopped, 0 zombie
Cpu(s): 4.7%us, 1.9%sy, 0.1%ni, 93.2%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 16336156k total, 15474056k used, 862100k free, 362908k buffers
Swap: 6143996k total, 0k used, 6143996k free, 8415656k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20967 OSAdmin 30 10 1299m 120m 26m S 35.7 0.8 0:03.47 java
14231 tomcat 20 0 3422m 3.1g 22m S 2.0 20.0 10869:37 cuic_reporting
1 root 20 0 19572 1812 1244 S 0.0 0.0 2:59.65 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 25:22.51 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 2:42.43 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
6 root RT 0 0 0 0 S 0.0 0.0 0:14.34 watchdog/0
7 root RT 0 0 0 0 S 0.0 0.0 25:47.89 migration/1
8 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/1`;
let pattern = /(\d+(?:\.\d+)?)(?:[^\S\r\n]+\S+){2}[^\S\r\n]+cuic_reporting\b/;
console.log(str.match(pattern)[1]);