Javascript正则表达式否定给出了错误的结果

时间:2015-09-15 10:00:54

标签: javascript regex

例如我的数据

AAAG        ( 382 TO 385 )( 1729 TO 1732 )( 2405 TO 2408 )( 3759 TO 3762 )
AAAKSKSAL       ( 1941 TO 1949 )( 3973 TO 3981 ) AAAKSKSAL

我试过下面的脚本

var xa = "AAAKSKSAL     ( 1941 TO 1949 )( 3973 TO 3981 )";
var regex = /([^\dTO\s\(\)]+)/g;
var matches =  [];
matches = regex.exec(xa); 
alert(matches);

我的字符串只包含一个数据,但会提醒AAAKSKSAL,AAAKSKSAL

或者其他

var xa = "AAAKSKSAL    ( 1941 TO 1949 )( 3973 TO 3981 ) ( 1941 TO 1949 )( 3973 TO 3981 ) AAAKSKSAL AAAKSKSAL AAAKSKSAL";

它提醒AAAKSKSAL,AAAKSKSAL。但在前面的示例中,我的输入数据包含四个匹配元素。但结果只有两个。我的正则表达式的错误是什么?

但我在perl中尝试了相同的概念,这样可以正常工作

 $s = "AAAKSKSAL( 1941 TO 1949 )( 3973 TO 3981 )  AAAKSKSAL";  
 @ar = $s=~m/([^\dTO\s\(\)]+)/g;  
 print @ar

2 个答案:

答案 0 :(得分:1)

您的正则表达式没问题,但您错误地使用了表达式 .exec()。而不是:

var matches =  [];
matches = regex.exec(xa); 
alert(matches);

试试这个:

var matches = [];

while ((m = regex.exec(xa)) !== null) {
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }

    matches.push(m[0]);
}

alert(matches);

答案 1 :(得分:0)

您应该使用replace并删除不需要的文字而不是匹配:

xa = xa.replace(/\s*\(\s*\d+\s+TO\s+\d+\s*\)\s*/ig, '');

RegEx Demo