我匹配这些数字:
0
1
1.5
2
2.1
3
3.5
..
up to
10
匹配这些数字会有什么好的正则表达式?
编辑:可接受的数字应为:0到10之间的一个整数,后跟0或1的小数,形式为1到9之间的整数。
我没有准备好的数字,我需要在复杂的HTML中匹配它们。
示例1:
<div style="whatever">gotta match this number 3.5</div>
示例2:
<what>11 dont match it
示例3:
<what>9<weirdtag>match me</div>
答案 0 :(得分:1)
如果没有RegEx,只需使用条件,就可以更轻松地匹配这一点,如下所示:
var string = 'sljfkd;4lskf8iel5.3jslkd;a';
var numbers = string.match(/\d\.*\d*/gm);
var matches = [];
for (i = 0; i < numbers.length; i++) {
if (numbers[i] >= 1 && numbers[i] <= 10) {
matches[matches.length] = numbers[i];
}
}
alert(matches);
&#13;
请不要使用RegEx来执行此操作 - 它会变得非常混乱。
答案 1 :(得分:1)
如果你想沿着正则表达式走下去那么我相信这个可怕的正则表达式符合你的要求:
(?<![\d\.-])\d(\.\d)?(?!(\.\d)|\d)|(?<![\d\.-])10(?!(\.\d)|\d])
工作原理:
如果删除边界条件,则正则表达式看起来更简单:
\d(\.\d)? | 10
这匹配 EITHER “一个数字,可选地后跟一个句号和一个数字” OR “数字10”< / em>(没有小数位)根据您的要求。
正则表达式的其他部分添加lookaround行为以确保正则表达式不匹配负数,或数字后跟句点和更多数字。这是为了确保这样的事情:
10.5
不会产生两个不同的匹配:“10”然后“5”。
注意
这将不匹配.5 .7 .9
(但将匹配0.5 0.7 0.9
)
此外,不匹配10.0
(但将匹配10
)
答案 2 :(得分:0)
怎么样:
(?<!\d)(\d(?:\.[1-9])?|10)(?!\d)
其中:
(?<!\d) : negative look behind assuming there're no digits before
( : begin capture group 1
\d : a digit
(?: : begin non capture group
\. : a dot
[1-9] : a digit between 1 and 9
)? : end group, optional
| : OR
10 : number 10
) : end group 1
(?!\d) : negative lookahead, no digits after
答案 3 :(得分:0)