在我的网页上,我有:
var res = number.match(/[0-9\+\-\(\)\s]+/g);
alert(res);
如你所见,我想只获得数字,字符+, - ,(,)和空格(\ s)
当我尝试number = '98+66-97fffg9'
时,预期结果为:98+66-979
但我得到98+66-97,9
这里的逗号很奇怪!如何消除它?
答案 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"]