Диапазон номеров 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));