1

我有一个字符串,说

var Str = 'My name is 123 and my name is 234'.

现在我把它分成

var arrStr = Str.split(' ');

我遍历数组并根据单词是字符串还是数字具有不同的逻辑。我该如何检查?我试过typeof这对我不起作用。

编辑:

在看到多个答案后。现在,我很绝望,哪种方法最有效?

4

4 回答 4

6

如果您只关心数字,那么您可以使用如下正则表达式而不是使用 split:

var input = "My name is 123 and my name is 234";
var results = input.match(/\d+/g)

如果您关心所有部分,那么您可以使用另一个表达式来查找所有非空格字符,如下所示:

var input = "My name is 123 and my name is 234";
var results = input.match(/\S+/g)

然后逐个迭代它们,并使用isNumeric()@CMS 在这个著名问题中发布的著名函数检查给定字符串是否为数字。

function isNumber(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}

注意:感谢@Pointy,如果您希望它们作为数字,input.match(/\d+/g).map(Number).

于 2013-10-29T14:34:42.580 回答
2

您需要尝试将数组值转换为整数。

要迭代它们,您可以使用for循环:

for(i=0;i<arrStr.length;i++) {
    var result = !isNaN(+arrStr[i]) ? 'number' : 'string';
    console.log(result);
}

在这里,我使用一元+来尝试将每个数组值的值转换为数字。如果失败,结果将是NaN. 然后我使用 JavaScript 的isNaN()方法来测试这个值是否为NaN. 如果不是,那么它是一个数字,否则它是一个字符串。

使用您提供的字符串的结果是:

string
string
string
number
string
string
string
string
number

要在if语句中使用它,我们可以简单地:

for(i=0;i<arrStr.length;i++) {
    if(isNaN(+arrStr[i])) {
        /* Process as a string... */
    }
    else {
        /* Process as a number... */
    }
}

JSFiddle 演示

于 2013-10-29T14:38:07.443 回答
1

阐述嗅探器的答案......

var input = "My name is 123 and my name is 234";
var numberArray = input.match(/\d+/g);
var wordArray = input.match(/[A-Za-z]+/g);

for (var number in numberArray)
{
    //do something
}
for (var word in wordArray)
{
    //do something
}
于 2013-10-29T14:39:06.407 回答
0

在研究的过程中,我发现了这个Number()物体。这通常用于处理数字。MDN有一个很好的文档。

我发现未传递数字时Number()返回NaN(非数字)。由于没有数字返回 NaN,这可能是检查传递的对象是字符串还是数字文字的好方法。

所以我的代码是:

if (Number(arrStr[i]) == NaN){
    //string
} else  {
    //number
}
于 2013-10-29T14:33:24.573 回答