regex 如何从字符串表中提取特定的列?

deikduxw  于 2023-01-31  发布在  其他
关注(0)|答案(3)|浏览(164)

我有一个文本。我如何用JavaScript和RegExp提取Name列?我有一个代码,但无法正常工作

const stdout = 
`Name               Enabled Description
----               ------- -----------
6ytec              True
DefaultAccount     False   Some text.
John               True
WDAGUtilityAccount False   Some text
Admin              False   Some text
Guest              False   Some text`

const regexp = new RegExp("([а-яА-Яa-zA-Z_0-9]+)\\s+(True|False)\\s+");
let result = stdout.match(regexp);
console.log(result);
v9tzhpje

v9tzhpje1#

不使用regex的替代方法:

const stdout = 
`Name               Enabled Description
----               ------- -----------
6ytec              True
DefaultAccount     False   Some text.
John               True
WDAGUtilityAccount False   Some text
Admin              False   Some text
Guest              False   Some text`

const firstColumn = stdout
  .split('\n')
  .map(line => line.split(' '))
  .map(word => word[0])
  .slice(2)

console.log(firstColumn);
6fe3ivhb

6fe3ivhb2#

您可以使用以下方法:

[...stdout.matchAll(/^(?!----|Name\b)\S+\b/gm)]

^-匹配行首
(?! -负前瞻
| - 或
\S +-非空白
而\b表示非字符之间的边界(即非空格结束时)
/gm-表示全局和多行

5jvtdoz2

5jvtdoz23#

我找到了解决方案!感谢谈论“组”:

console.log(stdout);
const regexp = new RegExp("(?<name>([а-яА-Яa-zA-Z_0-9]+))\\s+(True|False)\\s+", "mg");
for (const match of stdout.matchAll(regexp)) {
  console.log(match.groups.name);
}

相关问题