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
369 is also 9
00 is not a real number
010 is not a real number either
1, 20, 300, 99, and 45 should match because a comma: "," is a non-word character
`;
var rgx = /\b([1-3]0?[0-9]|[1-2]?[1-9]?[0-9]|3?[1-5]?[0-9]|360)\b/g;
var res = str.match(rgx, '$1');
console.log(JSON.stringify(res));
2条答案
按热度按时间krugob8w1#
列举可能性:
字符串
bfhwhh0e2#
RegEx Number Range
[0-9]
\b
word boundary meta是为了确保以下单词:36000或l337不匹配。有3个character class ranges†(数百个1-2| 3、十位0-9| 0-5和1 -9)。?
是一个lazy quantifier,因为百和十不一定总是在那里。对于360,管道|
和周围的括号是alternations,因为十位不能是[0-6]
,因为这样做会留下匹配361到369的可能性。字符串
虽然防止了超过360的可能性,但也防止了获得160-199和260-299的范围的可能性。我们可以添加另一个替代:
|
并稍微改变范围:型
\b
防止相邻字符渗入匹配项[
...]
覆盖一个范围或一组文字匹配?
将前面的匹配设为可选(
...|
...)
是一个或门型
†
[0-9]
作为Meta序列的等价物是\d
。👍感谢
Demo
型