RegExp не возвращает ожидаемый результат для разбора строк номера версии - PullRequest
2 голосов
/ 17 мая 2019

У меня есть имена файлов, такие как

TACO - v3 - something
BURRITO - v4.3
Enchilada - v5.1 - something

И я хочу разобрать эти сладкие версии (v5.1).

    var regExp = new RegExp("- (v.\S*)");
    var version = regExp.exec(fileName)[1];

Но это возвращает только первый \ S (поэтому я получаю v5, а не v5.1). Я читал где-то еще, что регулярные выражения в google apps не работают * или +, что выглядит сумасшедшим, и кажется, что многие другие используют *, и это работает для них. Что я делаю не так?

Повторение, мне нужен полный номер версии (2 или 4 символа) независимо от того, следует ли что-либо за ним в имени файла.

var regExp = new RegExp('- (v.\S*)\s*');

также работает в моем тестере регулярных выражений, но не в GAS. Ожидаемый результат v5.1, фактический результат v5

1 Ответ

3 голосов
/ 17 мая 2019

Если вы не экранируете . в своем регулярном выражении с помощью \., оно становится специальным подстановочным знаком, соответствующим любому символу.Используя шаблон /v\d+(\.\d+)?/, вы можете сопоставить литерал v, за которым следуют одна или несколько цифр, затем необязательный литерал . и еще один цикл цифр.Возможно, вы захотите, чтобы эта группа соответствовала нулю или более раз с помощью квантификатора *, если у вас есть версии, такие как v5.6.2.

const data = `TACO - v3 - something
BURRITO - v4.3
Enchilada - v5.1 - something`;

const result = data.match(/v\d+(\.\d+)*/g);
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...