Не могу получить это регулярное выражение для извлечения моих групп захвата - PullRequest
1 голос
/ 04 мая 2020

Я знаю, что google-apps-script не полностью поддерживает регулярные выражения. Но на других моих функциях он извлек то, что я искал. Похоже, я чего-то здесь упускаю.

var teststring = "E37:E61";
var regExp = /\w+(\d+)\:\w+(\d+)/; // no i or g needed here as fas as I think
var extractedNumbers = regExp.exec(teststring);

Вывод:

[E37:E61, 7, 1]

Что я также проверял:

var teststring = "E37:E61";
var regExp = new RegExp(/\w+(\d+)\:\w+(\d+)/); // Note that '' are not working I had to use //
var extractedNumbers = regExp.exec(teststring);

Выход:

null

Дополнительно протестировано:

var regExp = /\w+(\d+)\:\w+(\d+)/;
var rowsToFill = teststring.match(regExp);

Выход:

[E37:E61, 7, 1]

Я ищу:

[37, 61]

Ответы [ 3 ]

3 голосов
/ 04 мая 2020

\w включает цифры. Используйте более точные c регулярные выражения

var teststring = "E37:E61";
var regExp = /[A-Z]+(\d+)\:[A-Z]+(\d+)/; // no i or g needed here as fas as I think
var extractedNumbers = regExp.exec(teststring);
console.info(extractedNumbers)
3 голосов
/ 04 мая 2020

Следует иметь в виду, что \w соответствует цифрам.

Используйте [^\W\d] для сопоставления любых символов слова, кроме цифр, или просто [a-zA-Z_]:

var teststring = "E37:E61";
var regExp = /[^\W\d]+(\d+):[^\W\d]+(\d+)/; 
var extractedNumbers = regExp.exec(teststring);
console.log(extractedNumbers);
// => [ "E37:E61", "37", "61" ]
1 голос
/ 04 мая 2020

Шаблоны регулярных выражений жадно совпадают слева направо. Вот почему \w (который включает цифры, см. Другие ответы) соответствует E3 и E6 (соответствующий ему второй ди git не соответствует, так как в этом случае полное регулярное выражение больше не может совпадать).

Рядом с мерами, предложенными другими участниками, вы также можете переключиться на не жадное сопоставление в соответствующих подвыражениях:

var teststring = "E37:E61";
var regExp = /\w+?(\d+)\:\w+?(\d+)/; // quantifiers '+'/'*' suffixed with '?' match non-greedily
var extractedNumbers = regExp.exec(teststring);
console.log(extractedNumbers);
// => [ "E37:E61", "37", "61" ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...