使正则表达式更安全

时间:2015-09-25 17:42:21

标签: javascript regex

我试图让一堆正则表达式更安全,我的意思是更安全,我想要更准确。

所以,我对RegExp很新,我想知道我是否正确行事(不是正则表达式,而是变得更安全)。

所以,我现在就开始了,这是我想要改变的第一个RegExp,我希望推动01/2011。

过去的RegExp:

var text    = 'INSCRIÇÃO: 60.537.263/0001-66 COMP: 01/2011 COD REC: 150';
var reg     = /COMP.*?(\d\S*)/;
var match   = reg.exec(text);
console.log(match[1]);

新RegExp:

var text    = 'INSCRIÇÃO: 60.537.263/0001-66 COMP: 01/2011 COD REC: 150';
var reg     = /COMP:\s([0-9]{0,2}\/[0-9]{0,4})/;
var match   = reg.exec(text);
console.log(match[1]);

为什么这样?这篇文章只是一个巨大文本的一部分,所以我需要精确。

其他问题是关于将正则表达式设为可选,所以如果不匹配任何内容,则返回undefined。

感谢。

1 个答案:

答案 0 :(得分:1)

根据您的反馈:

  

我想特别用两个数字,一个/四个数字

来推送值

您可以使用

/\bCOMP:\s*(\d{2}\/\d{4})(?!\d)/g

\b是单词边界,因此5COMP不会匹配。

\s*将匹配0个或更多的空格(如果必须有空格,请改用+量词)。

\d{2}将恰好匹配2位数。

由于前瞻\d{4}(?!\d)将匹配4位数而不再匹配。这种前瞻只是确保在前4位数之后没有数字。您也可以在此处使用\b以确保匹配字边界。



arr = [];
var re = /\bCOMP:\s*(\d{2}\/\d{4})(?!\d)/g; 
var str = 'COMP:10/9995, COMP: 21/1234, COMP: 21/123434, REGCOMP: 21/1234';
var m;
 
while ((m = re.exec(str)) !== null) {
    arr.push(m[1]);
}
console.log(arr);