javascript使用正则表达式获取错误结果

时间:2016-05-06 07:09:59

标签: javascript regex

在我的网页上,我有:

var res = number.match(/[0-9\+\-\(\)\s]+/g);  
alert(res);

如你所见,我想只获得数字,字符+, - ,(,)和空格(\ s)

当我尝试number = '98+66-97fffg9'时,预期结果为:98+66-979 但我得到98+66-97,9

这里的逗号很奇怪!如何消除它?

5 个答案:

答案 0 :(得分:2)

这可能是因为你得到了两个满足你表达的群体。

换句话说: match机制在找到第一个不需要的字符时会停止聚合组 - f。然后它跳过匹配,直到下一个正确的组,在这种情况下,只包含一个数字 - 9。这两组用逗号分隔。

试试这个:

var number = '98+66-97fffg9';
var res = number.match(/[0-9\+\-\(\)\s]+/g);  
// res is an array! You have to join elements!
var joined = res.join('');
alert(joined);

答案 1 :(得分:1)

你得到这个是因为你的正则表达式在数字字符串中匹配了两个结果,而不是一个。尝试打印res,您会发现自己已与98+66-979以及9匹配

答案 2 :(得分:1)

String.match返回匹配项的数组。在您的情况下,您收到了两个['98+66-97','9']项,但alert函数将它们输出为一个字符串'98+66-97,9'
而不是match函数使用String.replace用于从输入数字中删除(过滤)所有不允许的字符的功能:

var number = '98+66-97fffg9',
    res = number.replace(/[^0-9\+\-\(\)\s]+/g, "");

console.log(res);   // 98+66-979

答案 3 :(得分:1)

stringvariable.match(/[0-9\+\-\(\)\s]+/g);会为您提供stringvariable的匹配字符串输出,不包括不匹配的字符。

在您的情况下,您的字符串为98+66-97fffg9,因此根据正则表达式,它将消除" fffg"并将为您提供["98+66-97","9"]数组。 它的匹配函数的默认行为。

您只需执行res.join('')即可获得所需的输出。 希望它能帮到你

答案 4 :(得分:1)

根据docs的文件,返回值为

  

包含整个匹配结果和任何括号捕获的匹配结果的数组,如果没有匹配则为null。

S,您的返回值包含

["98+66-97", "9"]

因此,如果您想跳过parentheses-captured matched results

只需从正则表达式中删除 g 标记。

所以,你的表达应该喜欢这个

number.match(/[0-9\+\-\(\)\s]+/);,其结果为["98+66-97"]