regex 使用正则表达式查找字符串中的0-360

bfrts1fy  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(138)

我想写一个正则表达式,它可以提取字符串中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)

字符串
我想用正则表达式来实现

krugob8w

krugob8w1#

列举可能性:

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

字符串

bfhwhh0e

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的可能性。

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]作为Meta序列的等价物是\d

👍感谢

Demo

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));

相关问题