>source

다른 숫자는 그대로두고 숫자를 뽑아야하는 문자열 (numBody)이 있습니다. 문자열 안에는 다음과 같은 것들이 많이 있습니다 :

</span>510<br /> //one number I need to pick up
(60–122)         //two more I need to pick up
>361–423<br />   //I need to AVOID this one

할 정규식 체인을 만들었지 만 Google Apps Script가 lookbehind를 지원하지 않으며 캐릭터 :

var pattern = new RegExp(">[0-9]{1,4}(?=<br)|\\([0-9]{1,4}|[0-9]{1,4}(?=\\))", "g");
var numMatch = numBody.match(pattern);

따라서 첫 번째 숫자를 가져 와서 세 번째 예에서 숫자를 피하도록 작동하는 br 다음에 1 ~ 4 개의 숫자 그룹을 가져 오도록 식을 설정했습니다. 결과를 내게 남겨주세요 :

>510

두 번째 표현은 여는 괄호 뒤에 숫자를 집어 넣고 싶지만 다음과 같이 남겨 둡니다.

(60

세번째는 추가 비트를 피하기 위해 필요한 조회를 포함하므로 괜찮습니다.

캡처 및 비 캡처 구조를 사용하려고 시도했지만 작동하지 않았습니다.

var pattern = new RegExp("(?:>)([0-9]{1,4})(?=<br)|\\([0-9]{1,4}|[0-9]{1,4}(?=\\))", "g");
var pattern = new RegExp(">([0-9]{1,4})(?=<br)|\\([0-9]{1,4}|[0-9]{1,4}(?=\\))", "g");
//both still return the same >510

이 단수 표현에서 일치시킬 필요가 있지만 결과에 필요하지 않은 문제를 고려하여 첫 문자를 어떻게 생략 할 수 있습니까?


  • 답변 # 1

    그래서 @Wiktor의 도움으로 다음 코드를 사용하여 작동하도록했습니다.

    var pattern = new RegExp(">([0-9]{1,4})(?=<br)|\\(([0-9]{1,4})|([0-9]{1,4})(?=\\))", "g");
    var skillMatch = [[], [], []];
    var i = 0;
    var k = 0;
    while((result = pattern.exec(skillBody)) !== null) {
      result.reverse();
      safeLabel:
      for(var j = 0; j < result.length; j++){
        if (result[j]) {
          skillMatch[k][i] = result[j];
          break safeLabel;
        }
      }
      i++;
      if (i===3) {
        i = 0;
        k++;
      }
    }
    
    

    실행 항목은 일치하는 부분에 대한 값을 생성하는 동시에일치하지 않는긴 패턴에서 모든 단일 검색 부분에 대해 null 값을 생성합니다. null이 아닌 데이터가있는 마지막 조각은 필요한 조각이므로 결과를 반대로 바꾸고 반복해야합니다 (예, j는 가능했지만 ... 아니오는 가능합니다). 그게 널이 아니야

    어쨌든 이것은 완벽하게 작동합니다.

관련 자료

  • 이전 oracle - 값 사이의 보간을위한 SQL 쿼리
  • 다음 Angular 프로젝트의 프로덕션 빌드에서 축소 및 uglifying/난독 처리를 비활성화하는 방법은 무엇입니까?