테스트가 JavaScript에서 정규 표현식에 대해 거짓을 반환하는 동안 결과를 찾는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/883625

  •  22-08-2019
  •  | 
  •  

문제

jQuery 플러그인으로 정렬 문제를 디버깅하려고했습니다. 테이블 리터 다음 코드를 사용하여 숫자를 확인합니다.

this.isDigit = function(s,config) {
                var DECIMAL = '\\' + config.decimal;
                var exp = '/(^[+]?0(' + DECIMAL +'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)' + DECIMAL +'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*' + DECIMAL +'0+$)/';
                return RegExp(exp).test($.trim(s));
            };

config.decimal의 값은 '입니다.'

이제 s = '0'이면 이것이 실패하지만, 대신 경기를 실행하면 REGEX는 예상대로 긍정적으로 응답하는 것으로 보입니다.

return exp.match($.trim(s)) != null

다른 결과를 반환하기 위해이 처리는 어떻게 다르게 다르게됩니까?

S가 파생 된 HTML을 원하는 경우 (마지막 열은 텍스트로 간주 됨) :

<tr class="">
  <td><a href="#">Click</a></td>
  <td>Annen Woods</td>
  <td>131</td>
  <td>20</td>        
  <td>5</td>
  <td>3</td>
  <td>12</td>
  <td>6</td>
  <td>50%</td>
  <td>0</td>    
</tr>

테스트가 부울 값을 반환하고 매치는 문자열 또는 null을 반환한다는 것을 이해합니다.

궁극적 인 질문은 왜이 정규 표현이 아닌지입니다.

return RegExp(exp).test($.trim(s));

동등한 :

return exp.match($.trim(s)) != null
도움이 되었습니까?

해결책

나는 정규 표현을 구성하는 데 사용되는 기능으로 인해 약간 이상한 일치라고 생각합니다.

일치는 String의 구성원입니다.

테스트는 Regexp의 회원입니다.

그러나 함수에서 Exp는 문자열로 정의됩니다. 따라서 기술적으로는 Exp를 정규 표현식이 아닌 String 값으로 사용하여 String 's Match ()를 실행하고 있습니다.

Regexp 생성자를 통해 Exp를 실행하면 test ()와 동일한 결과를 반환해야합니다.

다른 팁

일치 값 반환 값 배열, 테스트 반환 부울, 일부 엔진 테스트 반환 첫 번째 결과.

그것은 적절한 개체의 반전 인 것으로 밝혀졌습니다.

return exp.match($.trim(s)) != null

해야한다

return $.trim(s).match(exp) != null

원래 코드는 REGEX 문자열에 "0"이 존재하는지 확인했습니다.

여전히 테이블 러의 버그 인 것 같습니다. 테이블에 0 값이 존재하는 경우 구문 분석기를 '숫자'로 선언해야합니다. jQuery 테이블 orter 문제

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top