如何使用JavaScript与正则表达式提取字符串表格中的Name列
提取表格Name列的修正方案
你的代码有几个问题导致无法正常提取所有Name:
- 正则没加全局匹配标志
g,只会返回第一个匹配结果 - 正则末尾的
\s+强制要求Enabled列后面必须有空白,但像6ytec那行没有Description内容,导致匹配失败 - 没跳过表头和分隔线两行
下面给你两种可行的解决方法:
方法1:分割行后逐行提取
这种方式更直观,不容易出错:
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 lines = stdout.split('\n').filter(line => line.trim() !== ''); // 跳过前两行(表头和分隔线) const nameLines = lines.slice(2); // 提取每行的Name:取第一个连续非空白字符的部分 const names = nameLines.map(line => line.match(/^\S+/)[0]); console.log(names); // 输出:["6ytec", "DefaultAccount", "John", "WDAGUtilityAccount", "Admin", "Guest"]
方法2:修正正则全局匹配
调整正则,兼容有无Description的行,同时开启全局匹配:
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`; // 正则解释: // ^\S+ 匹配行首的连续非空白字符(Name) // \s+(True|False) 匹配Name后的空白和Enabled值 // (?:\s+.+)? 可选匹配后面的空白和Description内容(非捕获组) // gm 全局+多行模式,匹配所有行 const regexp = /^\S+\s+(True|False)(?:\s+.+)?/gm; const matches = stdout.match(regexp); // 从每个匹配结果中提取Name部分 const names = matches.map(match => match.match(/^\S+/)[0]); console.log(names); // 输出同上
内容的提问来源于stack exchange,提问作者Andrzej Jankowski
相关产品推荐
相关产品推荐

