Использование регулярного выражения Найти 0-360 в строке - PullRequest
0 голосов
/ 26 декабря 2018

Я хочу написать регулярное выражение, которое может извлечь число от 0 до 360 в строке.Ниже приведен пример:

Text: "Rotate by 360 degrees"
OP: 360

Text: "36 degrees degree rotation"
OP: 36

Text: "rotate 100"
OP: 100

Text: "rotate 6700"
OP: NA (as 6700 is out of range)

Я хочу добиться этого с помощью регулярного выражения

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Диапазон номеров RegEx [0-9]

Мета-граница \b слова должна гарантировать, что такие слова, как: 36000 или l337 не совпадают.Есть 3 диапазонов классов символов (сотни 1-2 | 3, десятки 0-9 | 0-5 и единицы 0-9).? - это ленивый квантификатор , потому что сотни и десятки не обязательно присутствуют постоянно.Трубка | и окружающие скобки являются чередованиями для 360, поскольку десятки не могут быть [0-6], поскольку при этом остается возможность сопоставления с 361 по 369 .

3[0-5][0-9] /* 300-359 */ |360 // 360

Хотя возможность превышения 360 предотвращается, также существует возможность получения диапазонов 160-199 и 260-299 .Мы можем добавить другое чередование: | и немного изменить диапазоны:

[1-2]?[0-9]?[0-9] // 0-299
  • Итак, резюмируем:

    • \bудерживает соседние символы от попадания в спички

    • [ ... ] охватывает диапазон или группу буквальных совпадений

    • ? делает предыдущее совпадение необязательным

    • ( ... | ... ) является логическим элементом ИЛИ

\b([1-2]?[0-9]?[0-9]|3[0-5][0-9]|360)\b

Эквивалент [0-9] в качестве мета-последовательности: \d.

Благодарим ? Master Toto за указание на недостатки диапазона.


Демо

var str = `
Rotate by 360 degrees
36 degrees rotation
Rotate 100
Turn 3600
Rotate 6700
270Deg
0 origin
Do not exceed 361 degrees or over.
Turn 180 degrees back 
`;

var rgx = /\b([1-2]?[0-9]?[0-9]|3?[0-5]?[0-9]|360)\b/g;

var res = str.match(rgx, '$1');

console.log(JSON.stringify(res));
0 голосов
/ 26 декабря 2018

Перечислите возможности:

\b([0-2]?[0-9]{1,2}|3[0-5][0-9]|360)\b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...