我有一个正则表达式与预期相反...我有一些可能是一个数字或不是。我尝试使用isNaN,但它给出了奇怪的结果,所以我想我尝试使用正则表达式。这甚至给出了更奇怪的结果。 html看起来像
<span class="label">31</span>
我通过var text = document.querySelectorAll('.label, .content');
然后我通过以下方式处理:
for (var i=0; i<text.length; i++) {
if (text[i].innerText.search(/^[0-9]+$/)) {
// do number stuff
}
}
但它匹配所有不是数字并且不处理数字的所有内容。如果我将正则表达式更改为/^[^0-9]+$/
(否定字符),它会匹配数字。这与我的期望相反!有人知道可能会发生什么吗?
感谢。
答案 0 :(得分:3)
search
method的工作方式与indexOf
类似,并返回找到正则表达式的索引,如果找不到,则返回-1
。由于你的正则表达式只匹配位置0,它只返回或-1
- 而-1
是真值,0
则不是。if (text[i].innerText.search(/^[0-9]+$/) == 0)
。这就是为什么行为被“倒置”了。
你可以做到
if (/^[0-9]+$/.test(text[i].innerText))
但你最好使用regex对象的test
method,它返回你想要的布尔值:
{{1}}
答案 1 :(得分:1)
不要使用搜索,使用匹配。
var text = document.querySelectorAll('.label');
if( text[0].innerText.match(/^[0-9]+$/) ){
console.log("Has numbers")
}else{
console.log("No numbers")
}
<span class="label">31</span>
答案 2 :(得分:0)
如果您要做的就是检查是否存在匹配项,请使用test
:
if(/^[0-9]+$/.test(text[0].innerText)) {
...
}
答案 3 :(得分:0)
删除“^”并尝试。因为“^”请求选择与正则表达式不匹配的项目。 所以它应该是/ [0-9] + $ / not / ^ [0-9] + $ /。