JavaScript正则表达式与预期相反

时间:2014-11-06 05:00:21

标签: javascript

我有一个正则表达式与预期相反...我有一些可能是一个数字或不是。我尝试使用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]+$/(否定字符),它会匹配数字。这与我的期望相反!有人知道可能会发生什么吗?

感谢。

4 个答案:

答案 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] + $ /。