对于制表符分隔的表,我想使用JavaScript正则表达式检索每行的第一列。我想不包括前导和尾随空格。如果列是空的(或只包含空格),我想忽略它。
使用括号中的子表达式可以实现:
/^ *((?=\S)[\S ]*\S) *(\t.*)*$/gm
所以$1
会在这种情况下给我我想要的东西。但我想知道是否有一个更整洁的解决方案,整个正则表达式将匹配。
修改:对于某些示例文字:
abaft\tinfamous\tvase
drab\tmarble
\tcover\tmakeshift
skirt abrupt
匹配项为abaft
,drab
和skirt abrupt
。
答案 0 :(得分:0)
似乎你可以使用
/^ *(\S[^\t]*)/gm
请参阅regex demo,其中您的所需值将被捕获到第1组。
var regex = /^ *(\S[^\t]*)/gm;
var str = "abaft infamous\tvase\n drab marble\n cover makeshift\nskirt abrupt";
var res = [];
while ((m = regex.exec(str)) !== null) {
res.push(m[1]);
}
console.log(res);

详细:
^
- 匹配一行的开头(由于/m
修饰符) *
- 零个或多个空格(\S[^\t]*)
- Goup 1捕获
\S
- 非空白字符[^\t]*
- 除标签外的零个或多个字符。 trim()
和String#match
的相同正则表达式的变体:
var regex = /^ *\S[^\t]*/gm;
var str = "abaft infamous\tvase\n drab marble\n cover makeshift\nskirt abrupt";
var res = str.match(regex).map(function(x) {return x.trim();});
console.log(res);