javascript使用正则表达式得到错误的结果

javascript getting a faulty result using a regular expression

本文关键字:错误 结果 正则表达式 javascript      更新时间:2023-09-26

在我的网页中,我有:

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

正如你所看到的,我只想得到数字,字符+,-,(,)和空格(''s)

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

逗号是个奇怪的字符!如何消除它?

这可能是因为您得到了两个满足表达式的组。

换句话说: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);

之所以会出现这种情况,是因为正则表达式在数字字符串中匹配了两个结果,而不是一个。尝试打印res,您将看到您已匹配98+66-9799

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

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

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

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

您可以简单地执行res.join('')以获得所需的输出。希望它能帮助你

根据来自文档的文档,返回值为

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

S、 您的返回值包含

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

所以如果你想跳过parentheses-captured matched results

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

所以,你的表情应该像这个

number.match(/[0-9'+'-'(')'s]+/);给出结果["98+66-97"]