Регулярное выражение для поиска и обрезки (начальные и конечные пробелы) первого столбца

Для таблицы с разделителями табуляции я хотел бы получить первый столбец каждой строки, используя регулярное выражение JavaScript. Я бы не хотел включать ведущие и конечные пробелы. Если столбец пуст (или содержит только пробелы), я хотел бы его игнорировать.

Это возможно с помощью вложенных в квадратные скобки выражений:

/^ *((?=S)[S ]*S) *(t.*)*$/gm

Так

For a tab-delimited table I would like to retrieve the first column of each row using a JavaScript regular expression. I would like to not include leading and trailing whitespace. If the column is empty (or just contains whitespace), I'd like to ignore it.

This is possible using bracketed sub-expressions:

/^ *((?=S)[S ]*S) *(t.*)*$/gm

So $1 would give me what I want in this case. But I was wondering if there was a neater solution where the whole regular expression would match.

Edit: So for some example text:

abafttinfamoustvase
  drabtmarble
    tcovertmakeshift
skirt abrupt

The matches would be abaft, drab and skirt abrupt.

что дайте мне то, что я хочу в этом случае. Но мне было интересно, есть ли более точное решение, где все регулярное выражение будет соответствовать.

Edit: So for some example text:

abafttinfamoustvase
  drabtmarble
    tcovertmakeshift
skirt abrupt

Матчи будутabaft, drabи skirt abrupt.

1 ответ

  1. Кажется, что вы можете использовать

    /^ *(\S[^\t]*)/gm
    

    Смотрите демонстрацию regex, в которой необходимые значения записываются в группу 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 -a non-whitespace char
      • [^\t]* — ноль или более символов, кроме вкладки.

    Вариация одного и того же regex С 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);