我试图让一堆正则表达式更安全,我的意思是更安全,我想要更准确。
所以,我对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。
感谢。
答案 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);